关于node发送http请求json数据返回不完整的问题
发布于 7 年前 作者 PatrickHai 13839 次浏览 最后一次编辑是 6 年前 来自 问答

各位大神:

本人最近刚开始学习nodejs,遇到问题实在无法解决,所以想请论坛里的前辈们指教。

背景描述:下面的是我自定义的一个模块,负责发送http请求获得API端数据。 遇到的问题:第一次请求返回正常的json字符串,如: {“message”:“success”,“count”:22,“status”:200,“data”:[{“useCommonCoupon”:56,“dateKey”:“2015-12-01”},{“useCommonCoupon”:59,“dateKey”:“2015-12-02”},{“useCommonCoupon”:59,“dateKey”:“2015-12-03”},{“useCommonCoupon”:62,“dateKey”:“2015-12-04”}]}

如果刷新页面再次请求就会出现返回的字符串为: {“message”:“success”,“count”:22,“status”:200,“data”:[{“useCommonCoupon”:56,“dateKey”:“2015-12-01”},{“useCommonCoupon”:59,"dateK 后面的数据丢失了,请教一下是什么问题。

谢谢!

var http = require(‘http’); var url = require(‘url’); exports.find = function(req,success){ var urlObj = url.parse(req.url, true, false); var options = { host: ‘server’, path: ‘/bigMemSopData/v1/dataPublic’+urlObj.search, method: ‘GET’ }; var req = http.request(options, function(res) { res.setEncoding(‘utf-8’); res.on(‘data’, function (response) { console.log(response); //返回数据 console.log('test!! '); success(res,JSON.parse(response)); }); }); req.on(‘error’, function(e){ console.log("auth_user error: " + e.message); }); req.end(); }

6 回复

你得到的response是data chunk吧,试试:

var data = [];
res.on(‘data’, function (response) {
	data.push(response);
});
res.on('end', function() {
	var body = JSON.parse(data.join(''));
})

@ruanyl 谢谢,但是还是不行,因为返回的chunk本身就已经是不完整的数据了。

把你这个api接口地址公开给我们调用一下试试?

搞定了,搞定后代码: var req = http.request(options, function (response) { var str = ‘’; response.setEncoding(‘utf8’); response.on(‘data’, function (chunk) { str += chunk; }); response.on(‘end’, function(){ success(response,JSON.parse(str)); }); }); req.on(‘error’, function (e) { console.log('problem with request: ’ + e.message); }); req.end();

@PatrickHai 搞定后的代码不也是把chunk拼接起来么?

@ruanyl 对,没错,受你启发了。但是一开始不行也不知道是啥原因。

回到顶部