我在nodejs中遇到问题,我使用https.request
向api请求,响应包含10000行的对象。
发生的情况是整个对象没有到达,并且解析给出错误:Unexpected end of JSON input
;
有人可以帮忙吗?
要请求的功能:
function request({
options,
method,
resource,
queryParams,
bodyParams,
}) {
return new Promise((resolve, reject) => {
const hasBodyParams = !!bodyParams;
const stringifyedQueryParams = strigifyQueryParams(queryParams);
const optionsRequest = {
...options,
method,
path: `${resource}${stringifyedQueryParams}`,
};
const req = https.request(optionsRequest, (res) => {
res.setEncoding(configs.ENCODING);
res.on(events.DATA, data => resolve({
body: JSON.parse(data),
statusCode: res.statusCode,
}));
});
req.on(events.ERROR, error => reject(error) );
hasBodyParams && req.write(bodyParams);
req.end();
});
}
答案 0 :(得分:0)
正如我在评论中所怀疑的那样,您没有处理多个data
事件。
data
事件,每次事件都包含响应中的大量数据(不是)。简而言之,您需要:
data
事件中,将新块附加到整个正文中end
事件时,解析整个正文。这是一个简短的示例,取自official documentation:
https.request(options, (res) => {
// PARTIAL example
res.setEncoding("utf8"); // makes sure that "chunk" is a string.
let fullBody = "";
res.on("data", data => {
fullBody += data;
});
res.on("end", () => {
const json = JSON.parse(fullBody);
// work with json
});
});