关于node结合monogoos设置restful规范的通用api接口
mkdir server cd server NUL app.js
npm i mongoose express cors
mkdir routes // api接口路由 => index.js mkdir plugin // 插件 db文件=> db.js mkdir models // 模块 mongoose => 模块名称.js 设置并导出Schema
const express = require('express'); const cors = require('cors'); const app = express(); app.use(express.json()); app.use(cors()); require('./routes/index.js')(app) ;// 引入并调用 require('./plugin/db.js')(app); // 引入并调用 app.listen(3000,()=>{ console.log('http://localhost:3000'); })
module.exports = app=>{ const mongoose = require('mongoose'); const dbName = 'heroAll'; // 数据库名称 mongoose.connect(`mongodb://127.0.0.1:27017/${dbName}`); }
// 这里不进行封装 封装的话会很难写 复杂化了 const mongoose = require('mongoose'); const Schema = mongoose.Schema({ title:{type:String}, parant:{type:mongoose.Types.ObjectId,ref:"Category"} // ref进行表关联 自己表关联查询 如果是2个表或者多表可以使用aggregate() // ref里可能是小写注意一下,没有用编程软件敲。。。 }) module.exports = mongoose.model('Category',Schema) // mongoose.model('定义名字',Schema,'如果不写 默认设置第一个参数的小写形式(设置指定表名)')
const express = require('express') module.exports = app =>{ const router = express.Router() /* * 通用接口 api CURD */ const result = { code:200, message:"请求成功" } /* ```````````````start```````````````````*/ /* 查 */ router.get('/',async(req,res)=>{ const queryOption = {} if(req.mode.modelName === 'Category') { queryOption.populate = "Category"; // 设置关联表 } // setOptions 针对特殊的接口进行处理 const mode = await req.mode.find().setOptions(queryOption).limit() res.send(...mode,...result) }) /* 增加 */ router.post('/',async (req,res)=>{ await req.mode.create(req.body) res.send(result) }) /* 修改 */ router.put('/:id',async(req,res)=>{ await req.mode.findByIdAndUpdate(req.body.id,req.body) res.send(result) }) /* 删除 */ router.delete('/:id',async(req,res)=>{ await req.mode.findByIdAndDelete(req.body.id,req.body) res.send(result) }) /* ``````````````end````````````*/ /* 1.设置中间件 来根据前端传递的名称找到文件 */ const resoureName = (req,res,next)=>{ // npm i inflection 进行单复数转换 const resoureNamePath = require('inflection').classify(req.params.resoure) // 挂载到req上 req.mode = require(__dirname+'../models'+resoureNamePath) next() // 开启下一步 必须写 } // 2.使用中间件 注入req.mode方法 app.use('/api/rest/:resoure',resoureName,router) }