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

本文介绍如何使用koa2框架及一系列中间件搭建Node.js服务,包括安装配置、路由设置及数据库操作等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、具体
文件目录如下:
这里写图片描述

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值