如何获取所提供函数的参数数量?

时间:2014-10-03 09:43:29

标签: node.js express

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(); }

1 个答案:

答案 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