# 可复用中间件

# 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)
  })
  1. 前端的相同的业务逻辑比如上传数据, 创建数据,
  2. 后端统一接口, 解析req 的model, 动态调用mongoose创造的model去创建数据。