2012-01-04 83 views
1

的getStockValue()函數是從以下列方式另一個JavaScript文件名爲:如何從node.js中的HTTP請求函數返回值?

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

這裏returnedData只包含 「-START-」。

我的目標是獲得從函數返回的身體對象,接收到響應。我試過把一個return語句放入'關閉'事件處理程序中,但它不起作用。

我該怎麼做?

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; 

回答

10

由於這是一個異步操作,如果將返回直線距離,並繼續在後臺運行,hense爲什麼你只收到-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); 
    }); 

    ... 
} 
+0

感謝會盡量回復您! :) – sbose 2012-01-04 17:51:29