我正在开发Web应用程序的后端。我已经为每个请求执行了一堆中间件 - [logging(before),authentication,Etag(Before),Nonce,httpRequest,Etag(after),logging(after)]。现在我的问题是,在处理每个请求时,当请求应该跳过其余的中间件并且只是进行日志记录时,会发生一些特殊情况。 我可以通过转储方式执行此操作,只需使所有中间件检查是否已发生某些情况,如果为true则只调用next()
,否则使用中间件处理请求。但我想知道是否有一种聪明的方法可以做到这一点?
以下是我目前用于配置要执行的中间件顺序的代码片段:
async.series(operations, function(err) {
if(err) {
console.log('Something blew up!!!!!!');
return next(err);
}
console.log('middleware get executed');
// no errors so pass control back to express
next();
});
"操作"变量是我需要按顺序执行的中间件列表。我需要使用async.series()因为我需要使中间件可配置的顺序。 是否有一个聪明的我可以保持中间件的顺序可配置并满足我的要求,如上所述?
修改
我需要跳过其余中间件的示例是,当身份验证失败并将statusCode写入" 401未授权",然后为中间件堆栈[记录(之前),身份验证,Etag(之前),Nonce,httpRequest,Etag(之后),日志记录(之后)],我将从身份验证跳转到日志记录(之后)。然后那将是请求的结束。
答案 0 :(得分:1)
我试图理解你的关注
我正在根据需要提供一个代码段来执行中间件功能。
async.each(operations, function(operation, callback) {
if(operation) {
// if operation is required execute here
callback();
} else {
// otherwise skip just to call callback() here
callback();
}
}, function(err){
if( err ) {
console.log(err);
} else {
next();
}
});
数组中的所有操作并逐个执行异步提供.each。
不必强制调用每个操作。您只需在其他情况下通过调用callback()跳过。我想说在if子句中你可以放置你的强制执行条件。
由于