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

如果像这样写:

  productModule.post("/modules", (req, res) => {
    res.send("");
}); productModule.get("/modules/:id", (req, res) => {
res.send("");
});

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

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

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

productModule.route('/modules')
// get
.get((req, res) => {
productModel.find().then(module => {
res.json(module);
}).catch(err => {
res.status(500).json({ message: err.message })
});
})
// add
.post((req, res) => {
productModel.findOne({ moduleName: req.body.moduleName }).then((module) => {
if (module) {
return res.status(500).json({ moduleName: "moduleName 巳存在!" });
} else {
const moduleName = req.body.moduleName;
const moduleClassName = req.body.moduleClassName; const newModule = new productModel({
moduleName,
moduleClassName
}); newModule.save().then(module => res.json(module)).catch(err => console.log(err));
}
})
})

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

productModule.route('/modules/:id')
// update
.post((req, res) => {
const _id = `${req.params.id}`;
const updateData = req.body; productModel.findByIdAndUpdate({ _id }, updateData, (err, module) => {
if (err) {
res.status(500).json({ error: err });
} else {
res.status(200).json(module)
}
})
})
// delete
.delete((req, res) => {
var id = `${req.params.id}`;
console.log(id)
productModel.findById({ _id: id }).then((id) => {
if (id) {
productModel.deleteOne({ _id: id }).then(module => res.status(200).json(module));
} else {
return res.status(400).json({ "_id": "id不存在" })
}
}).catch(err => {
console.log(err)
})
})

最后,将这个 Router 安装在 app

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. 在vue组件中设置定时器和清除定时器

    由于项目中难免会碰到需要实时刷新,无论是获取短信码,还是在支付完成后轮询获取当前最新支付状态,这时就需要用到定时器.但是,定时器如果不及时合理地清除,会造成业务逻辑混乱甚至应用卡死的情况,这个时就需要 ...

  2. [转]VB.net中 excel 的range方法

    本文转自:https://blog.csdn.net/bigheadsheep/article/details/7711235 第五章 Range对象基本操作应用示例(1)Range对象可能是VBA代 ...

  3. 剑指offer 26:复杂链表的复制

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  4. GO 全面解析 json tag 篇

    在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有反引号括起来的内容.形如: type User struct { UserId int `json:"us ...

  5. 2019 DevOps 必备面试题——代码版本控制篇

    原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...

  6. Python日期计算

    Python源代码如下: # -*- coding: UTF-8 -*- """ 简述:要求输入某年某月某日 提问:求判断输入日期是当年中的第几天? Python解题思路 ...

  7. Linux—磁盘管理

    https://www.cnblogs.com/new-journey/p/10076387.html https://www.cnblogs.com/jiangxiaoxian/p/9610903. ...

  8. PM8909 linear charger硬件概述

    电池充电是由qpnp-vm-bus.c(电池驱动BMS)和qpnp-linear-charger.c(线性充电器)组成: SMMB charger:Switch-ModeBattery Charger ...

  9. PyCharm批量修改变量名

    方法和 PyCharm重命名文件时更改引用的地方相同

  10. NOIP 2012 文化之旅

    洛谷 P1078 文化之旅 洛谷传送门 JDOJ 1788: [NOIP2012]文化之旅 T4 JDOJ传送门 Description Input Output Sample Input Input ...