node+koa2 +mongodb + API 旅游

88 阅读1分钟

安装mongoddb

地址:Download MongoDB Community Server | MongoDB

image.png

2.配置启动mongodb

image.png

image.png

image.png

image.png

image.png

image.png

image.png

安装koa

npm install koa koa-json koa-bodyparser koa/router @koa/cors mongoose

app.js

const Koa = require('koa')
const app = new Koa()
const json = require('koa-json')  // 用于将http响应的数据转换为json格式
const bodyParse = require('koa-bodyparser') // 解析http请求的消息体
const Router  = require('koa-router')  
const cors = require('@koa/cors') // 允许跨域
const mongoose = require('mongoose')
const {BASE_URL} = require('./config/Account')

const router = new Router() //创建路由

app.use(cors())
app.use(json())
app.use(bodyParse())


// 连接数据库
mongoose.connect(BASE_URL).then(res =>{
    console.log('数据库连接成功')
}).catch(err =>{
    console.log('数据库连接失败')
})

router.get('/login',ctx=>{
    console.log('这是一个get接口')
})
app.use(router.routes())
app.use(router.allowedMethods({}))
app.listen(3000,()=>{
    console.log('应用已经启动,http://localhost:3000');
})
module.exports = {
    // 数据库地址
    BASE_URL:'mongodb://127.0.0.1/lvyou-projects'
}

image.png

image.png

使用monggoose操作mongodb 增删改查

const mongoose = require('mongoose')
mongoose.pluralize(null) // 去掉集合后面的s
const {Schema,model} = mongoose


// 使用mongoose定义数据模型
// 用户账号表
const UserSchema  = new Schema({
    name:String,
    age:Number,
    mobile:String
});

module.exports = {
    modelUser:model('user',UserSchema)
}

在路由文件上引用

const Router  = require('koa-router')  

const router = new Router() //创建路由
const {modelUser} = require('../../models/collection')

image.png

新增

image.png

router.post('/add',async ctx=>{
    const res = await modelUser({name:'李四',age:20,mobile:'15625775964'}).save()
})

// 新增
router.post('/create',async ctx=>{
    const res = await modelUser.create(
        {
            name:'李四',
            age:20,
            mobile:'15625775964'
        }
    )
})

删除

router.post('/del',async ctx=>{
    const res = await modelUser.deleteMany({
        name:'李四'
    })
    console.log(res)
})

router.post('/delAge',async ctx=>{
    const res = await modelUser.deleteMany({
        age:{$eq:20}  // 等于
    })
    console.log(res)
})

删除查询的集合

image.png

更新数据

image.png

// name为小明更新为小红,只更新一条
router.post('/update',async ctx=>{
    const res = await modelUser.findOneAndUpdate(
        {
            name:'小明'
        },
        {
            name:'小红'
        }
)
    console.log(res)
})
// 更新多条
router.post('/update',async ctx=>{
    const res = await modelUser.updateMany(
        {
            name:'小明'
        },
        {
            name:'小红'
        }
)
    console.log(res)
})

查询

router.post('/find',async ctx=>{
    const res = await modelUser.find({
        name:'小红'
    })
    console.log(res)
})

router.post('/findAge',async ctx=>{
    const res = await modelUser.find({
        age:{$lt:30} // 小于30
    })
    console.log(res)
})

接口规范

// 统一返回给前端的接口数据格式
const responseHandler = async(ctx,next) =>{
    ctx.send = (msg='SUCCESS',code=200,data=null,error=null,extra=null) =>{
        ctx.body = {
            msg,// 表示成与否
            data,  // 返回前端
            error,// 错误说明
            extra // 额外说明
        }
        ctx.status = code
    }
   await next()
}

module.exports = responseHandler

在app.js引入

const responseHandler = require('./config/result')
app.use(responseHandler)

阿里云短信验证

image.png

"@alicloud/dysmsapi20170525": "^2.0.24", "@alicloud/openapi-client": "^0.4.6",