区分nodejs请求和响应

时间:2015-04-07 13:09:50

标签: node.js

nodejs回调函数的通用结构:

function(req,res){
  //handle callback
}

我只是想,即使有时我写错了(res, req)

,回调也应该正常工作

鉴于reqres的混合,我如何找到哪一个是实际请求,哪一个是响应。

2 个答案:

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


如上所述,给定变量reqres,很容易在函数体的顶部进行检查,如下面的代码所示。但是,请注意,这只会补救仅通过遵循API合同可以防止的内容,因此我不能推荐它(除非您真的想要使用更灵活的API来创建函数)。

function(res,req) {
  if (req instanceof http.ServerResponse) {
    // wrong order, swap.
    var t = req;
    req = res;
    res = t;
  }
  // handle request
}

答案 1 :(得分:2)

reqIncomingMessage个对象,resServerResponse个对象。

因此,检查每个属性的唯一属性,例如,如果特定对象具有writeHead()函数,则它是响应对象。

可能也可以使用instanceof来检查:res instanceof http.ServerResponse