express.Router() 与 express() 中的 express

Afr*_*ief 6 node.js express

正如快速路由指南这个答案中提到的,我们可以use从主应用程序创建“迷你应用程序” 。但是我看到了一个代码,它使用app而不是router在模块中

应用程序.js

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

var app = express();

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

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

路线/用户.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;
Run Code Online (Sandbox Code Playgroud)

我认为正确的用法routes/user.js应该是

router = express.Router()
Run Code Online (Sandbox Code Playgroud)

代替

app = express()
Run Code Online (Sandbox Code Playgroud)

app = express()也有效!有什么区别,为什么router = express.Router()更好?

小智 3

当您使用有许多路由的服务器时,将它们一起保留在主文件中可能会造成混乱。该let router = express.Router()选项的工作方式与 不同let app = express()

\n

app返回一个应用程序对象时,router将返回一个小的应用程序片段,类似于app,您稍后将在 Main 中使用逻辑来调用它们。

\n

关于您的问题,最重要的router, a 是独立的,不会干扰应用程序中的其他人,因为它是一个单一的环境。

\n

https://expressjs.com/en/api.html#router

\n
\n

路由器对象是中间件和路由的独立实例。您可以将其视为\xe2\x80\x9cmini-application,\xe2\x80\x9d 仅能够执行中间件和路由功能。每个 Express 应用程序都有一个内置的应用程序路由器。

\n

路由器的行为类似于中间件本身,因此您可以将其用作 app.use() 的参数或另一个 router\xe2\x80\x99s use() 方法的参数。

\n
\n