Javascript 请求不返回完整的响应。错误JSON.parse

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

我在nodejs中遇到问题,我使用https向api发出请求。请求,响应包含10000行的对象。 发生的情况是整个对象没有到达,解析会产生错误:
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
      });
    });