Express.js使用error-handling middleware,如下所示:
app.use(function(err, req, res, next) {...})
只有在以前的一个中间件中发生错误时才会调用它。
我已使用以下代码验证:
app.use(function(err, req, res, next){
console.log("CALL BAD");
res.send(500, 'Internal server error');
});
app.use(function(req, res, next){
console.log("CALL GOOD");
next();
});
第一个函数仅在出现错误时调用,但如果一切正常,则表示跳过它。所以它必须以某种方式区分4个args的功能和3个args的功能?它是如何做到的?
E.g。我知道arguments
魔术变量等等。但是在这种情况下,express表示类似function addroute(fn) {if (has4Params(fn)) doThis(); }
答案 0 :(得分:1)
我假设他们正在使用Function.length
属性,这是函数所期望的参数数量。所以像(为了简洁而编码很糟糕):
var myFunction = function(callback) {
if(callback.length == 3) {
console.log("CALL BAD");
return;
}
if(callback.length == 4) {
console.log("CALL GOOD");
return;
}
}
有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length。