JSON过长,http.request发送POST请求报错Unexpected end of JSON input

当使用Node.js的http.request发送POST请求时,如果JSON数据过长,可能会遇到'Unexpected end of JSON input'错误。错误的根本原因是未能完全接收响应内容。通过调整代码以确保读取完整数据,可以解决此问题。

JSON过长,http.request发送POST请求,报错Unexpected end of JSON input

错误是因为JSON太长,没有接收完所有的响应内容造成的
原来的代码

const http = require('http');

let data = {method:'hello'}
let content = JSON.stringify(postData);
let options = {
    hostname:'127.0.0.1',
        port:80,
        path: '/',
        method:'POST',
        headers: {
    		'Content-Type': 'application/x-www-form-urlencoded',
    		'Content-Length': Buffer.byteLength(content)
  		}
}
    
function getPromise(content,options){
    return new Promise(function(resolve, rej) {
        let request = http.request(options,  (res) => {
            res.on('data', (chunk) => {
                resolve(JSON.parse(chunk));
            });
        });
        request.write(content);
        request.end();
    })
}
getPromise(content,options)

因为请求的JSON长度比较长,这样读的内容不全,会报SyntaxError: Unexpected end of JSON input,修改函数:

function getPromise(content,options){
    return new Promise(function(resolve, rej) {
        let chunks = [];
        let request = http.request(options, function (res) {
            res.on('data', (chunk) =>  {
                chunks.push(chunk);
            }).on('end', () =>  {
                let data   = Buffer.concat(chunks);
                const json = JSON.parse(data);
                resolve(json)
            });
        });
        request.write(content);
        request.end();
    })
}
getPromise(content,options)

这样就能获取完整数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值