Node+express+mongoose前端实现建单crud接口
准备工作:需要安装依赖如下:node,express,mongoose,cors,requier-all
入口文件:index.js
const express = require("express");//引入express
const app = express();//定义一个app变量为express的实例
app.use(require('cors')());//引入cors,允许跨域
app.use(express.json());//使用json数据
require("./db")(app); // mongoose
require(‘./route/index’)(app) //引入index文件,该文件为接口文件
//监听3000端口,这里端口自定义,写的什么端口,请求接口就使用哪个端口(注:尽量不要与自己本地其他常用端口重复,避免端口占用),
app.listen(3000,()=>{ })
Dbserve文件:db.js
module.exports = app => {//导入一个函数,并接受一个app参
const mongoose = require('mongoose');//引入mongoose
mongoose.connect('mongodb://10.10.10.21:27017/node-serve', {//连接mongoose数据库,mongoose数据库端口为27017,node-serve为数据库名称(这里的名称可自定义)
useUnifiedTopology:true,
useNewUrlParser:true,
// ....其他参数,请参考mongoose官网
})
//将models文件下的所有js引用一次,所有模型文件都在models文件下
require('require-all')(__dirname+"/../models");
}
模型创建(模型文件):models/text.js
const mongoose = require('mongoose')
const schema = new mongoose.Schema({
name: { type: String },
},{
versionKey:false, // 去掉mongoose默认生成的_v
timestamps:true // 是否记录生成时间
})
module.exports = mongoose.model('text', schema);//导出模型text
通用接口文件route/index.js
module.exports = app => {
const express = require("express");//引入express
const router = express.Router({
mergeParams:true//允许合并url参数
});//定义一个变量为express的子路由
const mongoose = require("mongoose");
const middlewarePage = require('../pages') //分页处理
const resource = require('../resource')//引入模型处理
let result = { code: '0', message: "ok", data: null}; //前端返回数据格式
router.post('/create',async(req,res,)=>{ // 创建
const data = await req.Model.create(req.body)
result.data = data
res.send(result)
})
router.post('/update',async(req,res,)=>{ // 编辑
const data = await req.Model.findByIdAndUpdate(req.body.id,req.body)
result.data = data
res.send(result)
})
router.post('/del',async(req,res,)=>{ // 删除
const data = await req.Model.findByIdAndDelete(req.body.id)
result.data = data
res.send(result)
})
router.post('/list',async(req,res,)=>{ // list
const data = await req.Model.find(req.body).skip(req.skipPage).limit(req.limePage);
const total = await req.Model.countDocuments(req.body)
result.data = data
result.totalCount = total
res.send(result)
})
app.use('/rest/crud/:resource',middlewarePage(),resource(),router)
}
重复内容复用方法分页:pages.js
module.exports = options => {
return async (req, res, next) => {//crud通用接口处理中间件
let { pageSize, pageNum } = req.query;
req.skipPage = (Number(pageNum) - 1) * Number(pageSize);
req.obj = { "isActive": 1, "id": req.query.id };
req.populate = { populate: "items" }
req.limePage = Number(pageSize);
next();
}
}
重复内容复用方法分页:resource.js
module.exports = options => {
return async (req, res, next) => {//crud通用接口处理中间件
// req.params.resource表示:resource
// 这里会把每个引入req.params.resource首字母大写,因为models下的文件我都是大写命名的,不需要的话直接将modelName 改成req.params.resource即可
const modelName = require('inflection').classify(req.params.resource);
req.Model = require(`../models/${modelName }`);
next()
}
}
通过:http://localhost:3000/rest/crud/test/list 即可获取列表