app.router和express.static的Expressjs顺序

tom*_*456 3 node.js express angularjs

要配置我的Expressjs应用程序,我有这两行(以及其他):

...
app.use(express.static(__dirname + '/public'));
app.use(app.router);
...
Run Code Online (Sandbox Code Playgroud)

我已经读过,建议将路由器放在静态之前,但是当我做Angularjs应用程序时会呈现一个空白页面.当它们按所示顺序显示时,视图会正常呈现.

为什么是这样?

Ole*_*leg 9

最好用一个例子来解释.比方说,你有一个en.json文件,你也有一条路线:

app.get('/en.json', function(req, res) {
    res.send('some json');
});
Run Code Online (Sandbox Code Playgroud)

如果你放

app.use(app.router);
Run Code Online (Sandbox Code Playgroud)

之前

app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

路由器将优先于静态文件,用户将看到some json,否则en.json将提供文件.

因此,如果您没有这样的碰撞,那么您选择的订单无关紧要.

PS请注意,如果您使用的是Express 4,则可能会看到以下错误:

Error: 'app.router' is deprecated!
Please see the 3.x to 4.x migration guide for details on how to update your app.
Run Code Online (Sandbox Code Playgroud)

在维基页面@HectorCorrea已经在评论中分享了这个错误的解释:

no more app.use(app.router)

All routing methods will be added in the order in which they appear
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 这提供了有关解决Express 4中'app.router已弃用'错误的信息 - https://github.com/strongloop/express/wiki/New-features-in-4.x (3认同)