# 可复用中间件
# 1 通用CRUD接口
- 通用性
- 可扩展性
// 后端 api, 把不同url 当作
module.exports = options => {
return async (req, res, next) => {
const modelName = require('inflection').classify(req.params.resource)
// 解析req.params.resource的model为大写匹配models定义的名字
req.Model = require(`../models/${modelName}`)
// 挂载到req上, 让以后的操作找到models的名字
next()
}
}
、
const resourceMiddleware = require('../../middleware/resource')
app.use('/admin/api/rest/:resource', resourceMiddleware(), router)
//'/admin/api/rest/:resource' => 动态传入路径,
router.post('/', async (req, res) => {
const model = await req.Model.create(req.body)
res.send(model)
})
- 前端的相同的业务逻辑比如上传数据, 创建数据,
- 后端统一接口, 解析req 的model, 动态调用mongoose创造的model去创建数据。