我对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对象,过去我曾经成功使用过此代码,但是我无法弄清楚为什么它现在不起作用。
答案 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));