koa框架中的mongoose

32 篇文章 0 订阅
20 篇文章 1 订阅

node中引入mongoose后创建数据库对应的模型层,控制层目录结构(php也是类似的结构)

模型层

在模型层中建立.js文件。

const Mongoose = require('mongoose')
var user = new Mongoose.Schema({//Schema要实例化mongoose
    user: String,
    age: {
        type: Number,
        validate: {//验证器
            validator: function (v) {
                if (v > 30) {
                    return false
                }
            },
            message: '年龄不能大于30'
        },
        required: true//必要数据器
    },
    inter: Object
})
module.exports = Mongoose.model('user',user)//model不用实例化mongoose

这是一个简单是mongoose的模型,每一个模型都是有Schema开始的。每个Schema就是一个数据库的collections集合(表),
实例化Mongoose.Schema后可以定义集合中的每个字段。比如age:
type:对应字段的数据类型
validate:验证字段是否符合特定的要求
required:代表字段是必须的
最后将模型通过mongoose上的model创建模型并暴露出来让控制层引用,model中的名字最后会对应数据库中的每一个表,只是数据库中对应的表名会多一个s

控制层

控制层主要负责逻辑部分包括数据库的增删改查等操作。

const user = require('../model/user')
var data = {
    user: '测试名字',
    age: 18,
    inter: {
        sport: 'football',
        eat: 'apple'
    }
}
exports.insert = function (ctx) {
    user.create(data,(err,res) => {
        if (err) {
            console.log(err)
        } else {
            console.log(res)
            ctx.body = {//数据库操作的回调中定义ctx无效
                code: 200
            }
        }
    })
    //ctx.body不能放到数据库操作的回调中不然不能设置成功
    ctx.body = {
        code: 200
    }
}

控制层中可以把项目对应的方法全部丢到一个文件里面然后将对应的每个方法按照exports.方法名的方式暴露出来给路由。
上面是一个插入数据库的方法。

路由文件

const router = require('koa-router')()
const user   = require('../app/controllers/user')//入口文件掉用路由,路由调用controllers层,controllers层调用model层
router.get('/insertData',user.insert)//引用封装好的controllers层的方法
module.exports = router

http://localhost:3030/insertData就是对应的给前端的接口

说到这里顺便说一下路由的一个使用技巧

router.get('/insertData',async function (ctx,next) {
    if (10 > 5) {
        next()
    } else {
        return
    }
},user.insert)

router中可以放入多个方法,执行的顺序是从左到右。上面这段代码因为10大于5执行了next()方法可以接下去执行下user.insert方法,但是如果没有执行next()那么就不会执行user.insert

这个router的机制可以作为一种验证方式,对于需要验证token的接口来说是福音。

入口文件

const routerIndex= require('./router/routerIndex')          //路由实例app.use(routerIndex.routes(),routerIndex.allowedMethods())

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值