无法使用Node向客户端返回JSON响应

时间:2016-06-09 22:03:04

标签: json node.js http httprequest

我无法在请求时将JSON对象返回给客户端 - 我正在处理对'/ btc'的第一次GET调用。

//Main server to recieve requests
http.createServer(function(req,res){

 switch(req.method){
      case 'GET':
           switch(req.url){
                case '/btc':
                     callBtcApi(req,res)
                     console.log(' btc called');
                     break;
                case '/wallet':
                     callBtcWallet(req,res)
                     console.log('wallet called');
                     break;
                case '/weather':
                     callWeather(req,res);
                     console.log('weather called');
                     break
                default:
                     console.log('calling but not hitting');
                     break;
           }
      case 'POST':
           switch(req.url){
                case '/update':
                     console.log('update called');
                     break;
           }
 }

}).listen(3000);
下面的

callBtcApi(),查询比特币API并成功返回一个JSON对象(我打算用这个函数做更多的事情,先把基础知识放下来)。 callBtcApi()被成功调用。

function callBtcApi(req,res){

message = '';

 https.get('https://api.bitcoinaverage.com/ticker/global/GBP/', function(res){
      res.on('data',function(data){
           message += data;
      });
      res.on('end',function(){
           console.log('props called ;)');
           writeToCLient(res,message);
      });
 }).on('error', function(e){
      console.error(e);
 });
}

我遇到的问题是当我将此数据传递给res.on('end')中的writeToCLient()函数时。我在终端收到的错误是

TypeError: res.setHeader is not a function

我知道消息被传递到函数writeToCLient()中,因为我能够在控制台时看到终端中的数据。如果我临时隐藏所有res。()调用,我会调用.log(消息)。

function writeToCLient(res,message){
 console.log(message);
 res.statusCode = 200;
 res.setHeader('Content-Type','application/json');
 res.end(JSON.stringify(message));
}

我搜索了谷歌,但没有找到任何解释可能是什么问题的东西。问题可能是调用来自callBtcApi()内部的HTTP.get()请求,该请求位于我的主服务器中? 感谢

1 个答案:

答案 0 :(得分:2)

你能尝试一下吗?

function callBtcApi(request,response){

message = '';
 https.get('https://api.bitcoinaverage.com/ticker/global/GBP/', function(res){
      res.on('data',function(data){
           message += data;
      });
      res.on('end',function(){
           console.log('props called ;)');
           writeToCLient(response,message);
      });
 }).on('error', function(e){
      console.error(e);
 });
}