gpt4 book ai didi

node.js - 对除一个 Controller 之外的所有 Controller 使用快速中间件功能

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:00 25 4
gpt4 key购买 nike

我有一个应用程序,其 Controller 位于多个文件中,如下所示:

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 中添加一个检查以排除每个路由,但我认为这很糟糕。可能有很多路由需要检查,当我添加其中一个异常路由时,它迫使我在两个地方触摸代码。

一定有更好的方法,对吗?

最佳答案

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

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

现在,如果您使用 res.render 或其他结束请求-响应周期的操作而不是 next() 来结束 aRoutes ,中间件永远不会在aRoutes上运行。

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

关于node.js - 对除一个 Controller 之外的所有 Controller 使用快速中间件功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37263559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com