节点http.request():与var ClientRequest和callbackFn的关系

时间:2016-10-17 15:56:33

标签: javascript node.js

我是Node.js的新手。

我正在尝试进一步探索Node.js API。

我提到并编写了一个爬虫,代码可以运行。

我已成功将评论发布到网站上。

但我对返回类的执行顺序感到困惑 - clientRequest和

callbackFn。

var req = http.request(urlRequest,function(res){
console.log("Status: "+res.statusCode);
console.log("headers: "+JSON.stringify(res.headers));

res.on("data",function(chunk){
    console.log(Buffer.isBuffer(chunk));
    console.log(typeof chunk);
});

res.on("end",function(){
    console.log("comment success!");
});
});

req.on('error',function(e) {
console.log("Error :"+e.message);
});

req.write(postData);

req.end();

我对这些步骤的原始理解如下:

1)http.request(urlRequest

2)function(res)

3)最后返回clientRequest-class var req

但从代码来看,似乎我的理解是错误的。

应该是clientRequest-class-object var req'写'评论和

把它结束'然后触发callbackFn function(res)

请分享您的意见并告诉我有关此API的更多信息。

谢谢&最好的。

1 个答案:

答案 0 :(得分:0)

似乎http.request的异步性质可能会引起您的困惑。

基本上,将进行请求调用 - 这需要一些时间。与此同时,JS将转移到req.write()等。

您应该查看EventEmitters,您已经在请求回调中使用它们(例如。res.on("data",function(chunk))。

或许更好的举措是将请求之外的调用放入另一个回调函数中,然后在请求中调用该函数。这将导致在请求结束时调用它 - 如" end"发射器:

res.on("end",function(){
    console.log("comment success!");
    requestWrite();
});

function requestWrite(){
    req.write(postData);
    req.end();
}