当响应长度超过16101时,节点Js HTTP响应崩溃

时间:2015-06-08 12:46:35

标签: javascript node.js http

我正在使用Node JS HTTP请求。当我的回复长度超过16101时,它会截断我的回复。我收到的回复有限:

{"id_user":"133696"},{"id_u

这不是一个分块响应,只有一次。我想收到整个回复而不是截断。

我的节点版本是v0.10.36。

这是我的代码:

var https   = require('https');
            var querystring = require('querystring');

            postData.format = 'json';
            postData.apikey = 'abcd';

            jsonObject  = querystring.stringify(postData);

            var postheaders = {
                'Content-Type'      : 'application/x-www-form-urlencoded',
                'Content-Length'    : Buffer.byteLength(jsonObject, 'utf8')
            };

            if(callMethod == undefined){
                callMethod = 'POST';
            }

            var optionspost = {
                host    : this.host,
                port    : this.port,                
                path    : this.path,                
                method  : callMethod,
                headers : postheaders
            };

            var reqPost = https.request(optionspost, function(res) {

                res.setEncoding('utf-8');               
                res.on('data', function(responseData) {

                    //---->>> responseData containes truncated response

                    if(callFunction != undefined && callFunction != null && callFunction != ''){

                        callFunction(responseData, relatedData);//****** calling success function ****
                    }
                });
                res.on('end', function() {


                });
            });

            reqPost.write(jsonObject);
            reqPost.end();
            reqPost.on('error', function(e) {
                console.error(e);
            });

1 个答案:

答案 0 :(得分:2)

您的代码只期待data事件一次,但Node可以多次触发它。事实上,它可以发送它多次,因为它该死的喜欢。:)每次发出data事件时,会提供另一部分数据。您知道在end事件被触发时不再需要消耗数据 - 您应该在哪里处理数据和/或调用您的回调。

由于响应基本上是可读流,请查看data event for Readable Stream