如何从node.js中发出HTTP请求的函数返回值?

时间:2012-01-04 17:33:40

标签: javascript http node.js

以下列方式从另一个javascript文件调用getStockValue()函数:

var r=require("./stockfile");
var returedData = r.getStockValue());

此处的returnData仅包含“-START - ”。

我的目标是从<+ em> 接收响应后的 函数返回正文对象。我已经尝试将return语句放入' close '事件处理程序中,但它不起作用。

我该怎么做?

function getStockValue() {

    var http = require('http');

    var options = {
        host: 'in.reuters.com',
        path: '/finance/stocks/overview?symbol=RIBA.BO',
        method: 'GET'

    };

    var body = "--START--";

    var req = http.request(options, function (res) {
        console.log('STATUS: ' + res.statusCode);
        console.log('HEADERS: ' + JSON.stringify(res.headers));

        res.on('data', function (chunk) {
            body += chunk;

        });

        res.on('close', function () {
            console.log("\n\nClose received!");
        });

    });

    req.on('error', function (e) {
        console.log('problem with request: ' + e.message);
    });
    req.end();

    return body + '... recieved';
}

exports.getStockValue = getStockValue;

1 个答案:

答案 0 :(得分:10)

由于这是一个异步操作,如果直接返回并继续在后台运行,那么为什么你只收到-START-。您可以借助回调函数解决此问题。继承人如何:

按如下方式调用该函数:

r.getStockValue(function(result) {
     var returedData = result

     //... rest of your processing here
}));

并在getStockValue函数内更改为:

function getStockValue(callback) {
   ...

   res.on('data', function (chunk) {
        body += chunk;
        callback(body);
   }); 

   ...
}