添加路由拼接
const router = express.Router({
mergeParams: true
})
修改路由途径
将路径加上 restful风格 - rest,并添加动态路由 :resource
app.use('/admin/api/rest/:resource', router)
添加路由中间件
- 中间件为 function(req, res, next) { do sth }
next 是前往下一个中间件,执行相同路径的下一个方法 - inflection
npm i inflection
使用该插件的classify方法将小写复数的英文单词改为大写单数的形式,用来将路由名改为绑定的模型名(eg: categories -> Category)
app.use('/admin/api/rest/:resource', async (req, res, next) {
const modelName = require('inflection').classify(req.params.resource);
req.Model = require(`../../models/${modelName}`);
},router)
修改路由
module.exports = app => {
const express = require('express')
const router = express.Router({
mergeParams: true
})
// 增
router.post('/', async (req, res) => {
const model = await req.Model.create(req.body)
res.send(model)
});
// 查 populate - 查看父级
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);
});
// 根据ID查
router.get('/:id', async (req, res) => {
const model = await req.Model.findById(req.params.id);
res.send(model);
});
// 改
router.put('/:id', async (req, res) => {
const model = await req.Model.findByIdAndUpdate(req.params.id, req.body);
res.send(model);
});
// 删
router.delete('/:id', async (req, res) => {
const model = await req.Model.findByIdAndDelete(req.params.id, req.body);
res.send({
success: true
});
});
app.use('/admin/api/rest/:resource', async (req, res, next) => {
const modelName = require('inflection').classify(req.params.resource);
req.Model = require(`../../models/${modelName}`);
next()
}, router);
}
声明
本篇的作品来自于 “全栈之巅” 老师的教学视频https://www.bilibili.com/video/av51931842/,
简书https://www.jianshu.com/u/cd64ab6779d0,
将其中的重要部分做摘录,如有冒犯,请联系删除
网友评论