2016-12-28 47 views
1

的Node.js http.get在函數返回「未定義」

var exports = module.exports = {}; 
 
var http = require('http'); 
 

 
exports.get = function(key, app, vari) { 
 
    http.get('<url here>/?key='+key+'&app='+app+'&var='+vari+'&req=0', function (response) { 
 
     response.setEncoding('utf8'); 
 
     response.on('data', function(body) { 
 
      console.log(body); 
 
      return body; 
 
     }); 
 
    }); 
 
};

我的代碼(如上所示)將輸出到控制檯響應得很好,但嘗試使用功能在出口時,無論如何它都返回'undefined'。它收到的響應是一行,並且是「application/json」的內容類型。這是怎麼回事? (不,這不是 「網址在這裏」,我只是刪除隱私原因的URL。如果有幫助,我可以提供。)

+2

的[我如何返回從一個異步調用的響應?(可能的複製http://stackoverflow.com/questions/14220321/how-do-i-return-the - 響應從 - 一個異步呼叫) – slebetman

回答

0
exports.get = function(key, app, vari) { 

http.get('<url here>/?key='+key+'&app='+app+'&var='+vari+'&req=0', function (response) { 
     response.setEncoding('utf8'); 
     response.on('data', function(body) { 
      console.log(body); 
      return body; 
     }); 
    }); 
}; 
0

reference,和你需要傾聽結束事件,並返回一個承諾,而不是,只是想:

var exports = module.exports = {}; 
var http = require('http'); 

exports.get = function(key, app, vari) { 
    return new Promise(function(resolve) { 
     http.get('<url here>/?  key='+key+'&app='+app+'&var='+vari+'&req=0', function (response) { 
     response.setEncoding('utf8'); 
     var data = ''; 
     response.on('data', function(chunk) { 
      console.log(chunk); 
      data += chunk; 
     }); 
     response.on('end', function() { 
      resolve(JSON.parse(data)); 
     }); 
    }); 
}) 

}

0

我想通了,我只是NE有一個要求答覆。

var exports = module.exports = {}; 
 
var http = require('http'); 
 

 
exports.get = function(key, app, vari, answ) { 
 
http.get('http://<url here>/?key='+key+'&app='+app+'&var='+vari+'&req=0', function (response) { 
 
     response.setEncoding('utf8'); 
 
     response.on('data', function(body) { 
 
      answ(body); 
 
     }); 
 
    }); 
 
};