node使用querystring內(nèi)置模塊解決分頁(yè)返回?cái)?shù)據(jù)太多導(dǎo)致json.parse()解析報(bào)錯(cuò)問(wèn)題
前言
- 最近在使用node服務(wù),http模塊調(diào)用其他服務(wù)的分頁(yè)接口有時(shí)JSON.parse()會(huì)報(bào)錯(cuò)
- 發(fā)現(xiàn)當(dāng)分頁(yè)返回json數(shù)據(jù)過(guò)多時(shí),會(huì)導(dǎo)致控制臺(tái)輸出不全-數(shù)據(jù)不對(duì)-導(dǎo)致JSON.parse()出錯(cuò)
- 查閱資料發(fā)現(xiàn),控制臺(tái)輸出也是相當(dāng)于開辟了一塊空間,現(xiàn)在這塊空間存不下這么多json數(shù)據(jù)
- node有提供內(nèi)置模塊解決方案,使用querystring內(nèi)置模塊-把json數(shù)據(jù)以流的形式輸出轉(zhuǎn)換
代碼實(shí)現(xiàn)
// 導(dǎo)入http模塊
const http = require("http");
// 導(dǎo)入querystring模塊
const querystring = require("querystring");
// 注意基地址
// let base_url = "https://ceshi.com"
// 基地址-去掉https://前綴 - 不去會(huì)報(bào)錯(cuò)
let base_url = "ceshi.com"
// post-請(qǐng)求 - 分頁(yè)查詢
// 使用promise - 方便維護(hù)和管理
const requestpost = () => {
return new Promise((resolve, reject) => {
// 請(qǐng)求參數(shù)
let postData = querystring.stringify({
// 頁(yè)碼
// 頁(yè)數(shù)
// 總數(shù)
// 參數(shù)
});
// 配置項(xiàng)
const options = {
// 基地址
hostname: base_url,
// 默認(rèn)端口-不要改
port: 80,
// 接口路徑
path: "/api/ceshi/list",
// 請(qǐng)求方式
method: "post",
// 請(qǐng)求頭信息
headers: {
// 請(qǐng)求參數(shù)格式
"Content-Type": "application/json; charset=utf-8",
// token
Authorization: "",
},
};
// 發(fā)送請(qǐng)求
const getpost = http.request(options, (res) => {
// 會(huì)包裝一層data-看打印
// console.log('res',res)
// 使用JSONStream解析數(shù)據(jù)
// 真正數(shù)據(jù)data-不然jsonStream.on會(huì)執(zhí)行多次
const jsonStream = JSONStream.parse(res.data);
// 處理解析到的每個(gè)對(duì)象
jsonStream.on("data", (data) => {
// console.log("打印數(shù)據(jù)", data);
// 全部數(shù)據(jù)-最外層
resolve(data);
});
// 解析錯(cuò)誤
jsonStream.on("error", (err) => {
console.error(err.message);
});
// 將響應(yīng)流 - 放到JSONStream
res.pipe(jsonStream);
});
// 錯(cuò)誤處理
getpost.on("error", (err) => {
// 返回失敗結(jié)果
reject(err.message);
});
// 請(qǐng)求參數(shù)-寫入
getpost.write(postData);
// 結(jié)束請(qǐng)求-不寫請(qǐng)求發(fā)送不出去
getpost.end();
});
};總結(jié)
經(jīng)過(guò)這一趟流程下來(lái)相信你也對(duì) node-使用querystring內(nèi)置模塊解決分頁(yè)返回?cái)?shù)據(jù)太多-導(dǎo)致json.parse()解析報(bào)錯(cuò) 有了初步的深刻印象,但在實(shí)際開發(fā)中我 們遇到的情況肯定是不一樣的,所以我們要理解它的原理,萬(wàn)變不離其宗。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nodejs使用mysql2操作數(shù)據(jù)庫(kù)的方法完整講解
MySQL2是一個(gè)基于Node.js的MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,它是MySQL官方推薦的驅(qū)動(dòng)之一,下面這篇文章主要給大家介紹了關(guān)于Nodejs使用mysql2操作數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2024-01-01
詳解Koa中更方便簡(jiǎn)單發(fā)送響應(yīng)的方式
這篇文章主要介紹了詳解Koa中更方便簡(jiǎn)單發(fā)送響應(yīng)的方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
electron demo項(xiàng)目npm install安裝失敗的解決方法
下面小編就為大家分享一篇electron demo項(xiàng)目npm install安裝失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
整理 node-sass 安裝失敗的原因及解決辦法(小結(jié))
這篇文章主要介紹了整理 node-sass 安裝失敗的原因及解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
淺談node使用jwt生成的token應(yīng)該存在哪里
早上逛某乎的時(shí)候,遇到一位同學(xué)在問(wèn)這個(gè)問(wèn)題,很好奇jwt的存儲(chǔ)位置。本文詳細(xì)的介紹一下,感興趣的可以了解一下2021-06-06
Node.js中npm 和 peerDependencies的使用
本文詳細(xì)介紹了npm中的peerDependencies和--legacy-peer-deps使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Node.js五大應(yīng)用性能技巧小結(jié)(必須收藏)
本篇文章主要介紹了Node.js五大應(yīng)用性能技巧小結(jié)(必須收藏),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家2017-08-08

