mango做文档服务器,koa2搭建服务器+使用mongoose链接mangodb

使用node搭建服务器,用到了现在比较流行的框架koa。

1、初始化package.json

npm init -y

2、安装koa2

npm i koa --save

3、搭建服务器

const Koa = require('koa')

const app = new Koa()

app.use( async(ctx) => {

ctx.body = "hello world"

})

app.listen(3000, () => {

console.log('demo2 is run')

})

4、直接运行

node index.js

5、加入get或者post请求

app.use(async(ctx) => {

if (ctx.url === '/' && ctx.method === 'GET') {

let html = `

This is demo2

username:

age:

website

submit

`

ctx.body = html

} else if (ctx.url === '/' && ctx.method === 'POST') {

let postData = await parsePostDate(ctx)

ctx.body = postData

} else {

ctx.body = '

404

'

}

})

const parsePostDate = (ctx) => {

return new Promise((resolve, reject) => {

try{

let postData = ""

ctx.req.on('data', (data) => {

postData += data

})

ctx.req.addListener("end", function() {

let parseData = parseQueryStr(postData)

resolve(parseData)

})

} catch(error) {

reject(error)

}

})

}

const parseQueryStr = (queryStr) => {

const queryData = {}

const queryStrList = queryStr.split('&')

console.log(queryStrList)

for (let [index,queryStr] of queryStrList.entries()) {

let itemList = queryStr.split('=')

console.log(itemList)

queryData[itemList[0]] = decodeURIComponent(itemList[1])

}

return queryData

}

6、上面简单介绍了koa怎么开启简单的服务器,但是koa的强大之处在于能够加入很多好用的中间件

7、加入koa-bodyparser中间件简化post请求后

app.use(async(ctx) => {

if (ctx.url === '/' && ctx.method === 'GET') {

let html = `

This is demo2

username:

age:

website

submit

`

ctx.body = html

} else if (ctx.url === '/' && ctx.method === 'POST') {

let postData = ctx.request.body

ctx.body = postData

} else {

ctx.body = '

404

'

}

})

8、加入koa-router中间件简化请求判断

router

.get('/', (ctx, next) => {

let html = `

This is demo2

username:

age:

website

submit

`

ctx.body = html

})

.post('/',(ctx, next) => {

let postData = ctx.request.body

ctx.body = postData

})

app

.use(router.routes())

.use(router.allowedMethods())

9、引入koa2-cors中间件,设置请求跨域与请求类型

app.use(cors({

origin: function (ctx) {

if (ctx.url === '/test') {

return "*"; // 允许来自所有域名请求

}

return 'http://localhost:8080'; / 这样就能只允许 http://localhost:8080 这个域名的请求了

},

exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],

maxAge: 5,

credentials: true,

allowMethods: ['GET', 'POST', 'DELETE'],

allowHeaders: ['Content-Type', 'Authorization', 'Accept'],

}))

10、加入koa-static中间件,服务器可访问静态文件

// 引入node的path方便一些

const path = require('path')

app.use(static((path.join(__dirname, 'images'))))

11、还可以引入koa-send实现文件下载

router.get('/download', async function (ctx) {

// 为了方便演示,这里直接下载index页面

var fileName = 'index.html';

// Set Content-Disposition to "attachment" to signal the client to prompt for download.

// Optionally specify the filename of the download.

// 设置实体头(表示消息体的附加信息的头字段),提示浏览器以文件下载的方式打开

// 也可以直接设置 ctx.set("Content-disposition", "attachment; filename=" + fileName);

ctx.attachment(fileName);

await send(ctx, fileName, { root: __dirname + '/public' });

});

12、服务器整体构建完成,那么就要链接数据库(请自行在电脑上安装mongodb,https://www.mongodb.com/)

13、加入mongoose依赖链接本地的mangodb

// 直接在index.js下引入

const mongoose = require('mongoose')

var dbUrl = `mongodb://127.0.0.1:27017/test`

mongoose.connect(dbUrl, {useNewUrlParser:true} ,(err) => {

if (err) {

console.log('Mongoose connection error: ' + err.message)

} else {

console.log('数据库连接成功')

}

})

mongoose

.connection

.on('disconnected', function () {

console.log('Mongoose connection disconnected')

})

module.exports = mongoose

14、mongoose的增删改查,mongoose都是要先创建一个图表(Schema)然后再对其进行操作

const mongoose = require('mongoose')

// 创图表

var schema = new mongoose.Schema({

num:Number,

name: String,

size: String

})

// 增

new model({age:10,name:'save'}).save(function(err,doc){

console.log(doc);

})

// 删

temp.remove({name:/30/},function(err){})

// 改

await model.update({age:{$gte:20}},{age:40},function(err,raw){

console.log(raw);

})

// 查

await model.find((err,doc) => {

console.log(doc)

})

15、详细点的mangoose增删改查

//增(new + save)

let data = await(()=>{

return new Promise((resolve, reject) => {

new model({age:10,name:'save'}).save(function(err,doc){

//[ { _id: 59720bc0d2b1125cbcd60b3f, age: 10, name: 'save', __v: 0 } ]

console.log(doc)

resolve(doc)

});

})

})()

//删(deleteOne或者deleteMany)

let data =await model.deleteMany({name:/save/},function(err){})

//改(updateOne或者updateMany)

let data =await model.update({num:{$gte:20}},{num:40},function(err,raw){})

//查(find)

let data = await model.find(function (err,doc) {})

16、文档判断

$or    或关系

$nor    或关系取反

$gt    大于

$gte    大于等于

$lt    小于

$lte    小于等于

$ne    不等于

$in    在多个值范围内

$nin    不在多个值范围内

$all    匹配数组中多个值

$regex   正则,用于模糊查询

$size   匹配数组大小

$maxDistance 范围查询,距离(基于LBS)

$mod    取模运算

$near    邻域查询,查询附近的位置(基于LBS)

$exists   字段是否存在

$elemMatch 匹配内数组内的元素

$within   范围查询(基于LBS)

$box     范围查询,矩形范围(基于LBS)

$center   范围醒询,圆形范围(基于LBS)

$centerSphere 范围查询,球形范围(基于LBS)

$slice    查询字段集合中的元素(比如从第几个之后,第N到第M个元素

参考链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值