【问题标题】:Getting status, body, and headers from node-libcurl从 node-libcurl 获取状态、正文和标头
【发布时间】:2016-04-28 15:11:48
【问题描述】:

我在 Node.js 应用程序中有以下代码:

var curlStatus = ""; 
var curlBody = ""; 
var curlHeaders = ""; 
var curlInfo = curl.on('end', function( statusCode, body, headers){
    curlStatus = statusCode; 
    curlBody = body; 
    curlHeaders = headers; 

    //this.close(); 
    return {status: curlStatus, body: curlBody, headers: curlHeaders}; 
}); 

curl.on('error', function(){
    console.log("CURL ERROR");
}); 

curl.perform(); 

return {status: curlStatus, body: curlBody, headers: curlHeaders}; 上放置断点表明bodyheadersstatusCode 已成功填充。但是,在curl.perform() 之后放置断点表明curlStatuscurlBodycurlHeaders 变量仍然是空字符串。如何将信息传递给父函数?

【问题讨论】:

  • javascript 中的执行本质上不是顺序的(最好这样想),传递给curl.on('end') 的回调函数在curl.perform 之后的很晚的时间执行。因此,紧跟在curl.perform() 之后的断点不会显示任何内容。

标签: javascript node.js curl libcurl node-libcurl


【解决方案1】:

欢迎来到 javascript 和异步问题。

当您执行curl.perform(); 时,请求将开始但尚未完成,这就是您的变量curlX 尚未填充的原因。
请求完成后,您使用 url.on('end', function... 定义的回调将被调用,您将填充这些变量。

【讨论】:

  • 啊,好吧,所以理论上我可以使用类似承诺的东西来解决这个问题,对吧?
  • 是的,您可以将所有内容包装在 Promise 中并获得结果。或者在回调中编写脚本的下一步。
【解决方案2】:

我是插件的作者。

如果您对异步接口有疑问,或者需要同步解决方案,我前段时间添加了对Easy 句柄的支持,它们的使用几乎与libcurl easy interface 完全相同。

var Easy = require( 'node-libcurl' ).Easy,
    Curl = require( 'node-libcurl' ).Curl,
    url = process.argv[2] || 'http://www.google.com',
    ret,
    ch;

ch = new Easy();

ch.setOpt( Curl.option.URL, url );

ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {

    console.log( 'HEADERFUNCTION: ' );
    console.log( arguments );

    return size * nmemb;
});

ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {

    console.log( 'WRITEFUNCTION: ' );
    console.log( arguments );

    return size * nmemb;
});

ret = ch.perform();

ch.close();

console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );

但它对用户不太友好。从现在开始,您需要自己构建 body 数组并创建 headers 对象。

HEADERFUNCTIONWRITEFUNCTION 回调将分别接收响应正文和标头块。 buf 是一个 Node.js Buffer 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2015-02-18
    相关资源
    最近更新 更多