express CRUD

添加路由拼接

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,
将其中的重要部分做摘录,如有冒犯,请联系删除

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容