Javascript 请求不返回完整的响应。错误JSON.parse
我在nodejs中遇到问题,我使用https向api发出请求。请求,响应包含10000行的对象。 发生的情况是整个对象没有到达,解析会产生错误:Javascript 请求不返回完整的响应。错误JSON.parse,javascript,node.js,json,request,Javascript,Node.js,Json,Request,我在nodejs中遇到问题,我使用https向api发出请求。请求,响应包含10000行的对象。 发生的情况是整个对象没有到达,解析会产生错误:JSON输入的意外结束 有人能帮忙吗 要请求的功能: function request({ options, method, resource, queryParams, bodyParams, }) { return new Promise((resolve, reject) => { const hasBodyP
JSON输入的意外结束
有人能帮忙吗
要请求的功能:
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();
});
}
正如我在评论中所怀疑的,您没有处理多个
数据
-事件
- 当从请求接收到大量响应时,
-事件被调用多次,每次调用响应中的一块数据(不是完整响应)数据
- 在解析块时,尚未传输完整的JSON文档,因此解析失败,出现“意外的JSON流结束”错误
data
-事件中,将新块附加到完整的正文中end
-事件时,解析全文为了提供帮助,我们需要查看您的代码和JSON源代码。请发布您的JSON数据和解析代码。请求是一个简单的请求。在
postman
中,我收到了完整的json。我正在使用sampe请求:。在event res.on('data')中接收不完整的json数据。@CláudioHilário发布您的Nodejs代码,这样我们就可以确定了。data
-事件可能会被多次调用!因此您必须组合所有内容并解析完整的字符串。根据文档,当使用https.request
时,您会得到几个request.on('data',…)
在请求大数据集时触发request.on('end')
之前调用。正如您在代码中所示,您不必等待'end'事件,然后连接块并使用完整的JSON进行响应,而是在第一个块上使用部分JSON进行响应。使用.get()
如果您不想再次合并区块或修复代码以使用“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
});
});