28

当我使用 express 二进制文件创建示例 Express 应用程序时,引导代码具有以下几行:

...

var app = express();
...
app.use(app.router);

我没有找到太多关于 app.router 的信息。我认为这是处理路由(app.get()、app.post() 等)规则的中间件,但是当我删除 app.use(app.router); 时这些规则也会被执行;线。

那么这个中间件的确切用途是什么?

4

4 回答 4

38

在 Express 3.x 中,app.router 是连接中间件路由器的增强版本。正如赫克托所说,这是 Express 处理使用 , 等注册的请求处理程序的app.get地方app.post

如果您没有app.use(app.router)显式调用,那么 express 将在您第一次使用app.get(...),app.post(...)等时隐式调用它。但是,您可能希望.use显式调用它,因为您选择了所有中间件的顺序。

app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
// app.get, app.post, etc called before static folder
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public')));

在此处查看如何在 Express 3 源中检索路由器。

请注意,Express 4 不需要 app.router

于 2013-07-11T22:36:45.720 回答
17

这是来自 Express 2.x 指南http://expressjs.com/2x/guide.html

“注意 app.router 的使用,它可以(可选)用于挂载应用程序路由,否则第一次调用 app.get()、app.post() 等将挂载路由。”

我怀疑这也适用于 Express 3.x。

于 2012-11-06T16:29:54.930 回答
5

就我而言,我没有导出模块

module.exports = router;
于 2020-07-14T17:56:30.283 回答
0

此方法已弃用

为什么我们使用路由器..因为我们需要将我们的子应用程序连接到我们的主应用程序。

于 2017-12-18T10:31:50.537 回答