为了更好的组织代码,将 Router 实例进行模块化,将 get / post 等快捷方式放在Router上,而不是 App 上,然后将该 Router 作为中间件,use 到 server.js 上。

如果像这样写:

  productModule.post("/modules", (req, res) => {
  1. res.send("");
  2. });
  3.  
  4. productModule.get("/modules/:id", (req, res) => {
  5. res.send("");
  6. });

fruitRouter 实例写的会比较重复,这是个不好的做法,可能会因为输入错误而导致一些不必要的错误,可以通过下面的方法可以有效的避免重复录入:

  1. 使用 Router 的实例方法链式连接 get  / post 等
  2. 在特定的路由上安装中间件

将 route('/modules') 的方法写在一起

  1. productModule.route('/modules')
  2. // get
  3. .get((req, res) => {
  4. productModel.find().then(module => {
  5. res.json(module);
  6. }).catch(err => {
  7. res.status(500).json({ message: err.message })
  8. });
  9. })
  10. // add
  11. .post((req, res) => {
  12. productModel.findOne({ moduleName: req.body.moduleName }).then((module) => {
  13. if (module) {
  14. return res.status(500).json({ moduleName: "moduleName 巳存在!" });
  15. } else {
  16. const moduleName = req.body.moduleName;
  17. const moduleClassName = req.body.moduleClassName;
  18.  
  19. const newModule = new productModel({
  20. moduleName,
  21. moduleClassName
  22. });
  23.  
  24. newModule.save().then(module => res.json(module)).catch(err => console.log(err));
  25. }
  26. })
  27. })

将参数为 id 的另一个 route('/modules/:id') 写在一起

  1. productModule.route('/modules/:id')
  2. // update
  3. .post((req, res) => {
  4. const _id = `${req.params.id}`;
  5. const updateData = req.body;
  6.  
  7. productModel.findByIdAndUpdate({ _id }, updateData, (err, module) => {
  8. if (err) {
  9. res.status(500).json({ error: err });
  10. } else {
  11. res.status(200).json(module)
  12. }
  13. })
  14. })
  15. // delete
  16. .delete((req, res) => {
  17. var id = `${req.params.id}`;
  18. console.log(id)
  19. productModel.findById({ _id: id }).then((id) => {
  20. if (id) {
  21. productModel.deleteOne({ _id: id }).then(module => res.status(200).json(module));
  22. } else {
  23. return res.status(400).json({ "_id": "id不存在" })
  24. }
  25. }).catch(err => {
  26. console.log(err)
  27. })
  28. })

最后,将这个 Router 安装在 app

  1. app.use('/api/product', require('./routes/api/productModule'));

以上这种模块化的路由是比较安全的做法,而且,在页面上不会看起来太乱。

express 将 Router 实例模块化的更多相关文章

  1. express.Router创建模块化路由

    使用 app.route() 创建路由路径的链式路由句柄.由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误. 先放小实例: app.js var express = ...

  2. node.js中express的Router路由的使用

    express中的Router作用就是为了方便我们更好的根据路由去分模块.避免将所有路由都写在入口文件中. 一.简单的使用Router const express = require('express ...

  3. nodejs+express+ejs+mongoose实例

    nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码 ...

  4. Express框架 --router/app.use

    翻看去年自己记录的印象笔记,准备把笔记上的一些内容也同时更新到博客上,方便自己查看. 1.app.use和app.get的区别及解析 app.use(path,callback)中的callback既 ...

  5. (转)akka Router实例

    通常在分布式任务调度系统中会有这样的需求:一组actor提供相同的服务,我们在调用任务的时候只需要选择其中一个actor进行处理即可. 其实这就是一个负载均衡或者说路由策略,akka作为一个高性能支持 ...

  6. Express极简实例

    假设已创建一个Express工程,否则请参考express工程环境准备 修改app.js var express = require('express'); var app = express(); ...

  7. Python+Selenium 自动化实现实例-模块化调用

    public 目录存一些公共模块,供用例调用.login.py 内容如下: # coding=utf-8 import time # login def login(driver): driver.f ...

  8. Node.js_ express.Router 路由器_模块化管理路由

    路由器 express.Router 路由器 模块化管理 路由 基本使用: 路由模块 1. 引入 express const express = require('express'); 其他相关模块 ...

  9. express.Router

    [express.Router] 1.可使用 express.Router 类创建模块化.可挂载的路由句柄.Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”. 下 ...

随机推荐

  1. 安装上传下载插件,jdk及redis

    安装rz sz (1)编译安装root 账号登陆后,依次执行以下命令:cd /tmpwget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gzt ...

  2. frp内网渗透实现ssh外网访问家里树莓派(树莓派raspbian系统+腾讯云contos7)

    只有信用卡大小的它,同时也是一台功能完备的电脑(树莓派),把内网能玩的功能都玩了个遍,自然就有了外网访问这台树莓派的需求.一样也是查阅了无数文章,研究了无数个方案,最终试验成功用FRP实现了内网穿透, ...

  3. Oracle impdp导入数据临时表空间与undo表空间爆满解决实例

    Oracle impdp导入数据临时表空间与undo表空间爆满解决实例 [日期:2018-01-24] 来源:Linux社区  作者:rangle [字体:大 中 小]   针对Oracle数据迁移, ...

  4. NCCL(Nvidia Collective multi-GPU Communication Library) Nvidia英伟达的Multi-GPU多卡通信框架NCCL 学习;PCIe 速率调研;

    为了了解,上来先看几篇中文博客进行简单了解: 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?(较为优秀的文章) 使用NCCL进行NVIDIA GPU卡之间的通信(GPU卡通信模式 ...

  5. BERT源码分析

    一.整体 整个代码文件如下: 二.tensorflow基础 1.tf.expand_dims 作用:给定张量“ input”,此操作将在“ input”形状的尺寸索引“ axis”处插入尺寸为1的尺寸 ...

  6. npm --save-dev 和 --save 的区别

    转载 >>> 1. npm install 在安装 npm 包时,有两种命令参数可以把它们的信息写入 package.json 文件, 一个是npm install--save    ...

  7. leetcode 5199. 交换字符串中的元素

    地址  https://leetcode-cn.com/contest/weekly-contest-155/problems/smallest-string-with-swaps/ 给你一个字符串  ...

  8. 2019.10.02模拟赛T3

    题目大意: 设$S(n,m)$为第二类斯特林数,$F_i$表示斐波那契数列第$i$项. 给定$n,R,K$,求$\sum\limits_{i=1}^{n}(\sum\limits_{m=1}^{R}F ...

  9. 乘积量化(Product Quantization)

    乘积量化 1.简介 乘积量化(PQ)算法是和VLAD算法是由法国INRIA实验室一同提出来的,为的是加快图像的检索速度,所以它是一种检索算法,在矢量量化(Vector Quantization,VQ) ...

  10. Flink on YARN时,如何确定TaskManager数

    转自: https://www.jianshu.com/p/5b670d524fa5 答案写在最前面:Job的最大并行度除以每个TaskManager分配的任务槽数. 问题 在Flink 1.5 Re ...