express CRUD

2019-07-27  本文已影响0人  Jay_ZJ

添加路由拼接

const router = express.Router({
  mergeParams: true
})

修改路由途径

将路径加上 restful风格 - rest,并添加动态路由 :resource

app.use('/admin/api/rest/:resource', router)

添加路由中间件

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

上一篇 下一篇

猜你喜欢

热点阅读