HTTP GET请求,未收到“数据块”

时间:2020-05-01 21:28:56

标签: node.js http

我对GET请求有疑问。问题在于数据变量未填充,为空,但是结果代码为200,没有问题。如果我在浏览器中手动打开链接,则数据在那里。这是我的代码:

class DataHandler {
    constructor(httpRobot, config) {
        DataHandler.prototype.httpRobot = httpRobot;
        DataHandler.prototype.config = config;       
    }
}

class GetData extends DataHandler {
    constructor(httpRobot, config) {
        super(httpRobot, config);
    }
    R(RURL) {
        var data = '';

        super.httpRobot.get(RURL, (resp) => {
            console.log(resp.statusCode)
            resp.on('data', (chunk) => (
                data += chunk
            ))

            resp.on('end', () => {
                data = JSON.parse(data);
            })

        });
        console.log(data);
        return data;
    }
}

然后调用:

var httpRobot = require('http')
const GetData = require('./scripts/DataHandling/GetData')(httpRobot, config)
GetData.R('theurl')

当我调用R方法时,我给它提供URL,它应该返回数据,但没有。我已经检查了,super.httpRobot确实包含http对象。请求正在执行,响应代码为200,但数据保持为空。它是我希望收到的JSON对象,过去我曾经成功使用过此代码,但是我无法弄清楚为什么它现在不起作用。

1 个答案:

答案 0 :(得分:0)

那是因为您没有等待将块加载到数据中。返回之前,您必须使用Promise或Callback来等待数据。

以下是使用Promise的示例:

class GetData extends DataHandler {
  constructor(httpRobot, config) {
    super(httpRobot, config);
  }
  R(RURL) {
    return new Promise((resolve, reject) => {
      let data = '';
      super.httpRobot.get(RURL, resp => {
        console.log(resp.statusCode);
        resp.on('data', chunk => (data += chunk));

        resp.on('end', () => {
          data = JSON.parse(data);
          console.log(data);
          resolve(data); //Resolving
        });
      });
    });
  }
}


var httpRobot = require('http');
const GetDataInst = new GetData(httpRobot, {});
GetDataInst.R('http://dummy.restapiexample.com/api/v1/employees').then(d=>console.log(d));