2014-10-03 97 views
0

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个参数与3个参数的函数?它是如何做到的?

E.g.我知道的arguments魔变等,但在这种情况下,快递确实喜欢function addroute(fn) {if (has4Params(fn)) doThis(); }

+0

这就是javascript的工作原理。你应该在它被调用的地方处理它。你必须显式地发送{}或null来代替'err'参数 – madhairsilence 2014-10-03 09:46:24

+0

你为什么不[见你自己?](https://github.com/strongloop/express/blob/master/lib/application.js#L154-L210) – 2014-10-03 10:11:44

回答

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

+0

哇,我不知道,谢谢! – Fluffy 2014-10-03 10:18:06