express.Router()与express()在express中的区别

8
正如在express的路由指南这个答案中提到的那样,我们可以创建“小应用程序”并从主应用程序中使用它。但是我看到一个代码,在模块中使用app而不是router

app.js

var express = require('express');
var userRoutes = require('./routes/user');

var app = express();

app.use('/user', userRoutes);

module.exports = app;

routes/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()更好?

1个回答

3
当您在使用有许多路由的服务器时,将它们保存在一个主文件中可能会令人感到困惑。使用 let router = express.Router() 选项不同于使用let app = express()
虽然 app 返回应用程序对象,但是 router 将返回类似于 app 的小型应用程序片段,在其中您将使用逻辑稍后调用它们。
最重要的是,关于您的问题,一个独立的router不会干扰应用程序中的其他路由,因为它是一个单一的环境。
一个路由器对象是中间件和路由的隔离实例。您可以将其视为“小型应用程序”,只能执行中间件和路由功能。每个 Express 应用程序都有一个内置的应用程序路由器。
路由器本身就像中间件一样运行,所以您可以将其作为参数传递给 app.use() 或另一个路由器的 use() 方法。
更多信息请参阅:https://expressjs.com/en/api.html#router

你好,干扰是什么意思?一个“应用程序”会有哪些干扰?你能详细说明一下吗? - Afriza N. Arief
当你创建一个测试环境时,例如,处理错误和重构代码在独立的环境中更容易。关于路由器,一个很好的例子是中间件。您可以创建一个中间件,用于路由器的所有路由,而不会干扰其他路由器。当然,您甚至可以通过每个单独的路由来完成这个过程,但我认为这不是一个适当的方法来方便维护和阅读。 - Arthur Ferreira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接