express 将 Router 实例模块化
为了更好的组织代码,将 Router 实例进行模块化,将 get / post 等快捷方式放在Router上,而不是 App 上,然后将该 Router 作为中间件,use 到 server.js 上。
如果像这样写:
res.send("");
});
productModule.get("/modules/:id", (req, res) => {
res.send("");
});
fruitRouter 实例写的会比较重复,这是个不好的做法,可能会因为输入错误而导致一些不必要的错误,可以通过下面的方法可以有效的避免重复录入:
- 使用 Router 的实例方法链式连接 get / post 等
- 在特定的路由上安装中间件
将 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 实例模块化的更多相关文章
- express.Router创建模块化路由
使用 app.route() 创建路由路径的链式路由句柄.由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误. 先放小实例: app.js var express = ...
- node.js中express的Router路由的使用
express中的Router作用就是为了方便我们更好的根据路由去分模块.避免将所有路由都写在入口文件中. 一.简单的使用Router const express = require('express ...
- nodejs+express+ejs+mongoose实例
nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码 ...
- Express框架 --router/app.use
翻看去年自己记录的印象笔记,准备把笔记上的一些内容也同时更新到博客上,方便自己查看. 1.app.use和app.get的区别及解析 app.use(path,callback)中的callback既 ...
- (转)akka Router实例
通常在分布式任务调度系统中会有这样的需求:一组actor提供相同的服务,我们在调用任务的时候只需要选择其中一个actor进行处理即可. 其实这就是一个负载均衡或者说路由策略,akka作为一个高性能支持 ...
- Express极简实例
假设已创建一个Express工程,否则请参考express工程环境准备 修改app.js var express = require('express'); var app = express(); ...
- Python+Selenium 自动化实现实例-模块化调用
public 目录存一些公共模块,供用例调用.login.py 内容如下: # coding=utf-8 import time # login def login(driver): driver.f ...
- Node.js_ express.Router 路由器_模块化管理路由
路由器 express.Router 路由器 模块化管理 路由 基本使用: 路由模块 1. 引入 express const express = require('express'); 其他相关模块 ...
- express.Router
[express.Router] 1.可使用 express.Router 类创建模块化.可挂载的路由句柄.Router 实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”. 下 ...
随机推荐
- CKEditor5 使用第二天 获取回传数据,图片上传
1.当系统中存在编辑功能时,需要将数据库中数据回显到页面,因此采用了最一般的方法,通过隐藏的input标签存贮,在通过CkEditor5中的setData方法将数据赋值到富文本框中 <texta ...
- Tcp连接和断开
三次握手:客户端为a,服务端为b:开始都是closed状态:a主动打开进入到syn_sent状态,b被动打开进入listen状态:第一次握手,a向b发送SYN=1,seq为x的包,b收到以后进入syn ...
- 010.MongoDB备份恢复
一 MongoDB备份 1.1 备份概述 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoi ...
- prometheus监控tomcat
下载tomcat,wget **;解压tar zxvf **; 下载jmx_exporter, wget https://repo1.maven.org/maven2/io/prometheus/j ...
- Intellj IDEA 快捷键冲突
Intellij IDEA快捷键冲突 [问题描述]: ctr + alt + 方向键 与系统的快捷键冲突,按快捷键,屏幕方向发生改变. [解决办法]: ctr + alt + F12 调用出Intel ...
- 去除mysql里面重复的行并留下id最小的
DELETE FROM wynews WHERE title IN (SELECT * FROM (SELECT title FROM wynews GROUP BY title HAVING COU ...
- C++并发编程实战
第1章 你好,C++并发世界 第2章 管理线程 第3章 在线程间数据共享 第4章 同步并发操作 第5章 C++内存模型和原子类型操作 第6章 设计基于锁的并发数据结构 第7章 设计无锁的并发数据结构 ...
- 新终端必须source /etc/profile的解决办法,同时解决变色问题
Linux环境变量文件 /etc/profile:在登录时,操作系 统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /etc /enviro ...
- 【Nginx】Nginx反向代理转发Host设置
#事故现场: 服务器A(Nginx服务器):192.168.2.126 服务器B(Web服务器):192.168.2.221 服务器A反向代理服务器B,A配置了upstream为: http { up ...
- Python变量与内存管理
Python变量与内存管理 –与C语言中的变量做对比,更好的理解Python的变量. 变量 变量在C语言中 全局变量:其存放在内存的静态变量区中. 局部变量:代码块中存放在内存的代码区当中,当被调 ...