Node+express+mongoose前端实现简单crud接口

赵健柏
2023-12-01

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  即可获取列表

 类似资料: