[英]Request does not return complete response. Error JSON.parse
我在 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();
});
}
正如我在评论中怀疑的那样,您没有处理多个data
事件。
data
事件被多次调用,每次都使用响应中的一块数据(不是完整的响应)。简而言之,您需要:
data
事件上,将新块附加到完整的正文中end
事件被调用时,解析整个正文。这是一个来自官方文档的简短示例:
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
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.