node.js - express.Router() 与 express 中的 express()
问题描述
正如快速路由指南和这个答案use
中提到的,我们可以从主应用程序创建“迷你应用程序”和它。但是我看到了它使用app
而不是router
在模块中的代码
应用程序.js
var express = require('express');
var userRoutes = require('./routes/user');
var app = express();
app.use('/user', userRoutes);
module.exports = app;
路线/user.js
var express = require('express');
var app = express(); // not express.Router() !!
app.get('/:name', function(req, res) {
var userName = req.params.name;
res.render('user.jade', {
userName: userName
});
});
module.exports = app;
我认为正确的用法routes/user.js
应该是
router = express.Router()
代替
app = express()
但app = express()
也有效!有什么区别,为什么router = express.Router()
更好?
解决方案
当您使用有许多路由的服务器时,将它们放在一个主文件中可能会造成混淆。该let router = express.Router()
选项的工作方式与let app = express()
.
虽然app
返回一个应用程序对象,但router
将返回一个小的应用程序片段,类似于app
,您将使用逻辑稍后在 Main 上调用它们。
关于您的问题,最重要router
的是 a是孤立的,不会干扰应用程序中的其他人,因为它是一个单一的环境。
路由器对象是中间件和路由的隔离实例。您可以将其视为“迷你应用程序”,仅能够执行中间件和路由功能。每个 Express 应用程序都有一个内置的应用程序路由器。
路由器的行为类似于中间件本身,因此您可以将其用作 app.use() 的参数或用作另一个路由器的 use() 方法的参数。
推荐阅读
- git - 是否有任何默认的扩展名或文件名被 git 默认忽略?
- swift - 此类与键 distanceLabel 的键值编码不兼容
- java - 如何从角度通过springboot重定向
- python - 在 Windows10 上安装 python-poppler-qt5 时出错
- r - 是否有基于数字大小进行舍入的 R 函数?
- git - Git Status 吃 CPU 耗时 5s
- kotlin - 如何在内部定义带有 sharedPreferences 的顶级函数?
- mysql - Mysql:如何将自定义结果集作为选择语句输出
- c - 堆栈算法在删除n位后获得最大数的问题
- javascript - MD Datepicker 从月和年历模式中选择月和年后显示完整日期