首页 > 解决方案 > 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()更好?

标签: node.jsexpress

解决方案


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

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

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

路由器对象是中间件和路由的隔离实例。您可以将其视为“迷你应用程序”,仅能够执行中间件和路由功能。每个 Express 应用程序都有一个内置的应用程序路由器。

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


推荐阅读