nodeJS,偶尔报错

有两个文件,文件b如下:

var http=require('http');
module.exports=function(options,callback){
    console.info('start');
    var result;
    var req = http.request(options, (res) => {
      console.log(`STATUS: ${res.statusCode}`);
      console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
      res.setEncoding('utf-8');
      res.on('data', (chunk) => {
          result=JSON.parse(chunk)
        result=result.result;
        callback(result)
      });
//      res.on('end', () => {
//        console.log('No more data in response.')
//      })
    });
    
    req.on('error', (e) => {
      console.log(`problem with request: ${e.message}`);
    });
    
    // write data to request body
    req.end();
    
}

然后在文件a require,如下:

getWeather=require('./getWeather');
var save=require('./saveWeather');
var result=getWeather(options,function(result){
    console.log(result)
    save.houliData(result,'bg_hourly_weather')
    save.dailyData(result,'bg_daily_weather')
});

有的时候程序能正常运行,但是有的时间会报错
图片描述

这是什么原因?求指教~~~~

阅读 2.1k
2 个回答
      res.on('data', (chunk) => {
          result=JSON.parse(chunk)
        result=result.result;
        callback(result)
      });

这段有问题,data 事件被响应时,chunk 可能并不是完整的数据,因此你不能在此处使用 JSON.parse(chunk),你应该等所有数据接收完毕时再解析。

返回的JSON数据有问题,你控制台可以看到“长期处于空”后面不是一个?符号,你看下这个是什么

最好对返回的JSON数据进行unicode编码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题