node使用querystring内置模块解决分页返回数据太多导致json.parse()解析报错问题
作者:-風过无痕
这篇文章主要介绍了node使用querystring内置模块解决分页返回数据太多导致json.parse()解析报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
前言
- 最近在使用node服务,http模块调用其他服务的分页接口有时JSON.parse()会报错
- 发现当分页返回json数据过多时,会导致控制台输出不全-数据不对-导致JSON.parse()出错
- 查阅资料发现,控制台输出也是相当于开辟了一块空间,现在这块空间存不下这么多json数据
- node有提供内置模块解决方案,使用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-使用querystring内置模块解决分页返回数据太多-导致json.parse()解析报错 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。