nodejs
回调函数的通用结构:
function(req,res){
//handle callback
}
我只是想,即使有时我写错了(res, req)
鉴于req
或res
的混合,我如何找到哪一个是实际请求,哪一个是响应。
答案 0 :(得分:3)
JavaScript中的函数不是通过参数名称以编程方式原型化的。函数的length
属性仅提供定义中指定的参数数量:
var fn = function (one,two,three) { return "x"; };
console.log(fn.length); // 3
虽然有办法检索这些名称(参见this question),但通常程序只是忽略了如何命名函数/闭包的参数,而是假设您遵循建议的API。
出于这个原因,最好的做法是相应地注意API和名称参数。在Node.js HTTP请求侦听器中,request
始终位于response
之前(documented,并且有许多示例可用)。正如其他答案所述,您可以动态检查请求是http.IncomingMessage
还是响应是http.ServerResponse
,但在我看来,您可以避免在正确命名的情况下引入开销。< / p>
如上所述,给定变量req
和res
,很容易在函数体的顶部进行检查,如下面的代码所示。但是,请注意,这只会补救仅通过遵循API合同可以防止的内容,因此我不能推荐它(除非您真的想要使用更灵活的API来创建函数)。
function(res,req) {
if (req instanceof http.ServerResponse) {
// wrong order, swap.
var t = req;
req = res;
res = t;
}
// handle request
}
答案 1 :(得分:2)
req
是IncomingMessage
个对象,res
是ServerResponse
个对象。
因此,检查每个属性的唯一属性,例如,如果特定对象具有writeHead()
函数,则它是响应对象。
您可能也可以使用instanceof
来检查:res instanceof http.ServerResponse
。