app.router和express.static的Expressjs顺序

时间:2014-05-12 18:43:53

标签: node.js angularjs express

要配置我的Expressjs应用程序,我有这两行(等等):

...
app.use(express.static(__dirname + '/public'));
app.use(app.router);
...

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

为什么会这样?

1 个答案:

答案 0 :(得分:8)

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

app.get('/en.json', function(req, res) {
    res.send('some json');
});

如果你把

app.use(app.router);

app.use(express.static(__dirname + '/public'));

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

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

P.S。请注意,如果您使用的是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.

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

no more app.use(app.router)

All routing methods will be added in the order in which they appear

希望这有帮助