ExpressJS App.use路由序列

时间:2013-09-09 04:16:10

标签: node.js express routes

我在app.js中有以下内容:

app.use(express.static(path.join(__dirname, 'public')));
app.use(function(req, res, next) {
    console.log('app.use');
    ...
    next();
});

app.use(app.router);

public文件夹包含子文件夹imagescssjs

app.use(app.router);之后,我有从Amazon S3返回图像的路由定义。

app.get('/images/:type/:id', image);

问题是当页面包含图像时,app.use被调用两次。怎么预防呢?我想忽略/images/*来电app.use(function(req, res, next) {});

1 个答案:

答案 0 :(得分:2)

通常Express使用中间件连接架构。每个中间件都接受 next 函数,如果被调用则将该流传递给下一个中间件。因此,从理论上讲,如果你错过它,你可以存档你想要的东西:

app.use(function(req, res, next) {
    // check if the route matches amazon file
    if(...amazon file...) {
       // serve image
    } else {
       next();
    }
});
app.use(express.static(path.join(__dirname, 'public')));