基于koa2 + mongoose 的简易后台架构

1、安装

cnpm install koa --save //koa安装
cnpm install koa-bodyparser --save //koa的参数解析中间件
cnpm install koa2-cors --save //koa的跨域中间件
cnpm install koa-router --save //koa的路由映射
cnpm install mongodb --save //mongodb
cnpm install mongoose --save //mongoose
//package.json
{
  "dependencies": {
    "koa": "^2.5.0",
    "koa-bodyparser": "^4.2.0",
    "koa-router": "^7.4.0",
    "koa2-cors": "^2.0.5",
    "mongodb": "^3.0.4",
    "mongoose": "^5.0.10"
  }
}

2、具体
文件目录如下:
基于koa2 + mongoose 的简易后台架构_第1张图片

下面一个个解释各个文件和文件夹的作用。

app.js

// 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
const Koa = require('koa');
//导入跨域中间件
const cors = require('koa2-cors');
//导入路由映射中间件
//const router = require('koa-router')();
//导入参数解析中间件
const bodyParser = require('koa-bodyparser');

//导入控制器路由
const controller = require('./controller');

//导入mongodb
const mongoose = require('mongoose');

// 创建一个Koa对象表示web app本身:
const app = new Koa();

//使用跨域访问中间件。
app.use(cors());

//使用参数解析中间件,注意,此中间件必须在router前被使用
app.use(bodyParser());

//连接mongodb 数据库 ,地址为mongodb的地址以及集合名称。
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/mongoosedb');

app.use(controller());

// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');

controller.js
控制器文件。用于执行每个路由对应的方法。与routerHandle.js 配套使用。

const routerPath = require('./routerHandle');
let addMapping =(router, mapping)=>{
    for (let url in mapping) {
        if (url.startsWith('GET')) {
            let path = url.substring(4);
            router.get(path, mapping[url]);
            //console.log(`register URL mapping: GET ${path}`);
        } else if (url.startsWith('POST')) {
            let path = url.substring(5);
            router.post(path, mapping[url]);
            //console.log(`register URL mapping: POST ${path}`);
        } else {
            console.log(`invalid URL: ${url}`);
        }
    }
};

module.exports = function (dir) {
    //这里引入了koa的路由中间件
    let router = require('koa-router')();
    addMapping(router, routerPath);
    return router.routes();
};

router文件夹
里面放着具体的代码逻辑,如router/user.js:

/*router/user.js*/
let User = require('../models/user');
let user = {};

user.userGet = async (ctx, next)=>{
    let name = ctx.request.body.name;
    let age = ctx.request.body.age;
    let userResult = await User.find({name});
    try{
        if(userResult.length>0){
            ctx.body = {op:false,msg:'昵称已存在'};
            return
        }
        let ob = {name,age};
        let user = new User(ob);
        try {
            await user.save();
            ctx.body = ob;
        }catch (e){
            ctx.body = {op:'false',msg:e};
        }
    }catch (e){
        ctx.body = {op:false,msg:e}
    }
};

module.exports = user;

schemas 以及 models
在mongoose中,schema和model都是比较重要的概念。schema是用于定义“文档”的结构,model由schema产生。model再被用于创建mongodb的“文档”。

schemas/user.js

/*schemas/user.js*/

let Schema = require('mongoose').Schema;
//定义一个Schema非常简单,指定字段名和类型即可。
let userSchema = new Schema({
    name: String,
    age: String,
});

module.exports = userSchema;

/*类型支持下面8种。

String      字符串
Number      数字    
Date        日期
Buffer      二进制
Boolean     布尔值
Mixed       混合类型
ObjectId    对象ID    
Array       数组
*/

models/user.js

/*models/user.js*/
/*可以看到model的内容很简单,所以应该有很多人把model和schema放在一起了。*/

let mongoose = require('mongoose');
let User = require('../schemas/user');

module.exports = mongoose.model('User', User);

model被使用的例子在上面的router/user.js

就这样:
整个结构就解耦起来了。

你可能感兴趣的:(基于koa2 + mongoose 的简易后台架构)