刚学到的一个知识点
设计思路
- 前端请求的路由不同,所有将最后的路由作为动态参数进行处理(中间件处理)
- 根据动态参数判断是要对哪个类进行crud,从而引用哪个类
- 将引入的类挂载到req中,继续处理
- 根据特殊情况设定参数集,其他具体的类.crud操作统一使用刚刚挂载到req的参数调用
具体的代码实现
module.exports = app =>{
const express = require("express")
const router = express.Router()
router.post('/',async(req,res)=>{
const model = await req.Model.create(req.body);
res.send(model)
});
router.put('/:id',async(req,res)=>{
const model = await req.Model.findByIdAndUpdate(req.params.id,req.body);
res.send(model);
})
router.get('/',async(req,res)=>{
const queryOptions = {};
if(req.Model.modelName ==='Category'){
queryOptions.populate = 'parent'
}
const items = await req.Model.find().setOptions(queryOptions).limit(10);
res.send(items)
});
router.get('/:id',async(req,res)=>{
const model = await req.Model.findById(req.params.id);
res.send(model)
});
router.delete('/:id',async(req,res)=>{
await req.Model.findByIdAndDelete(req.params.id);
res.send({
success: true
})
});
app.use('/admin/api/rest/:resource',async(req,res,next)=>{
const Model = require('inflection').classify(req.params.resource);
req.Model = require(`../../models/${Model}`);
next();
},router)
}
|