Node.js中利用querystring模块处理大量分页数据解析异常

作者:夜航船

时间:2026-11-01

浏览:583

本文探讨在Node.js开发中,当HTTP接口返回大量分页数据导致控制台输出截断进而引发JSON.parse解析失败的问题。通过引入内置的querystring模块,将JSON数据转换为流式输出或字符串格式,从而规避解析错误。文章提供了基于Promise封装的POST请求示例代码,展示了如何正确拼接参数并发送请求,帮助开发者理解原理以应对实际开发中的各类数据交互场景。

文章目录

前言

  • 近期在Node.js服务开发过程中,调用外部服务的分页接口时,偶尔会出现JSON.parse()解析报错的情况。
  • 经排查发现,当分页接口返回的JSON数据量过大时,控制台输出会出现截断或数据不完整,进而导致JSON.parse()执行失败。
  • 查阅相关资料后得知,控制台输出本质上是开辟了一块内存空间,当数据量超过该空间容量时,会导致输出异常。
  • Node.js提供了内置模块解决方案,即利用querystring模块将JSON数据以流的形式进行输出和转换。

代码实现

// 导入http模块
const http = require("http");
 
// 导入querystring模块
const querystring = require("querystring");
 
// 注意基地址
// let base_url = "https://ceshi.com"
 
// 基地址-去掉https://前缀 - 不去会报错
let base_url = "ceshi.com"
 
 
 
 
// post-请求 - 分页查询
// 使用promise - 方便维护和管理
const requestpost = () => {
  return new Promise((resolve, reject) => {
 
    // 请求参数
    let postData = querystring.stringify({
      // 页码
      // 页数
      // 总数
      // 参数
    });
 
    // 配置项
    const options = {
      // 基地址
      hostname: base_url,
      // 默认端口-不要改
      port: 80,
      // 接口路径
      path: "/api/ceshi/list",
      // 请求方式
      method: "post",
      // 请求头信息
      headers: {
        // 请求参数格式
        "Content-Type": "application/json; charset=utf-8",
        // token
        Authorization: "",
      },
    };
 
    // 发送请求
    const getpost = http.request(options, (res) => {
      // 会包装一层data-看打印
      // console.log('res',res)
      // 使用JSONStream解析数据
      // 真正数据data-不然jsonStream.on会执行多次
      const jsonStream = JSONStream.parse(res.data);
 
      // 处理解析到的每个对象
      jsonStream.on("data", (data) => {
        // console.log("打印数据", data);
        // 全部数据-最外层
        resolve(data);
      });
      
      // 解析错误
      jsonStream.on("error", (err) => {
        console.error(err.message);
      });
 
      // 将响应流 - 放到JSONStream
      res.pipe(jsonStream);
 
    });
 
    // 错误处理
    getpost.on("error", (err) => {
      // 返回失败结果
      reject(err.message);
    });
 
    // 请求参数-写入
    getpost.write(postData);
 
    // 结束请求-不写请求发送不出去
    getpost.end();
 
  });
};

总结

通过上述流程,相信大家对Node.js中使用querystring内置模块解决分页返回数据过多导致的JSON.parse()解析报错问题已有了初步且深刻的印象。然而在实际开发中,遇到的具体情况可能千差万别,因此理解其核心原理至关重要,做到万变不离其宗。

以上为个人经验分享,希望能为大家提供参考,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章