对除一个控制器以外的所有控制器使用快速中间件功能

时间:2016-05-16 21:29:55

标签: node.js express

我有一个带有多个文件控制器的应用程序,如下所示:

var aRoutes = require('./controllers/controllerA');
var bRoutes = require('./controllers/controllerB');
var cRoutes = require('./controllers/controllerC');

app.use('/a', aRoutes);
app.use('/b', bRoutes);
app.use('/c', cRoutes);
// ... several more

我有这样的中间件功能......

app.use(function (req, res, next) {
    // do a middleware thing
    // but not if route == x or y or z or ... yuck!
});

我希望中间件可以运行除了 aRoutes之外的所有内容。我已经看到了一个答案like this,它建议在中间件fn中为每个要排除的路径添加一个检查,但这很糟糕,我想。可能有很多路由需要检查,当我添加其中一个异常路由时,它会强迫我在两个地方触摸代码。

必须有更好的方法,对吧?

1 个答案:

答案 0 :(得分:1)

假设我理解正确,你可以通过重新排列中间件和路由的顺序来解决它。

<fr:tab>

现在,如果您使用var aRoutes = require('./controllers/controllerA'); var bRoutes = require('./controllers/controllerB'); var cRoutes = require('./controllers/controllerC'); app.use('/a', aRoutes); app.use('/',function (req, res, next) { // do a middleware thing next(); }); app.use('/b', bRoutes); app.use('/c', cRoutes); // ... several more 结束aRoutes或结束请求 - 响应周期而不是res.render的其他操作,则中间件将永远不会在next()上运行{1}}。

然而,它将在所有其他路线上运行。这当然只有在您希望中间件启动请求 - 响应周期时才有效。如果你想在其他地方使用它,你必须相应地重新安排代码。