前言
- 最近在使用node服务,http模块调用其他服务的分页接口有时JSON.parse()会报错
- 发现当分页返回json数据过多时,会导致控制台输出不全-数据不对-导致JSON.parse()出错
- 查阅资料发现,控制台输出也是相当于开辟了一块空间,现在这块空间存不下这么多json数据
- node有提供内置模块解决方案,使用querystring内置模块-把json数据以流的形式输出转换
代码实现
javascript
// 导入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()解析报错 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!
有什么不足的地方请大家指出谢谢 -- 風过无痕