node.js http响应数据在数据大小很大时终止

时间:2018-02-05 11:16:48

标签: php node.js http

我正在使用nodejs并向服务器发送http post请求。在服务器端我运行PHP。我的服务器返回大约9KB的正确数据,但nodejs客户端中的数据终止。如果数据小于6KB,它可以正常工作。以下是我的代码

        var reqPost = https.request(optionspost, function(res) {
        res.on('data', function(d) {
            Console.log('Cloud Resp:', d);
            var jsonObj = JSON.parse(d);
        });
    }); 

我的打印Console.log('Cloud Resp:',d)仅打印最大8KB的数据。有人可以帮我理解这个限制是由nodejs或其他什么强加的,我怎样才能增加限制

2 个答案:

答案 0 :(得分:1)

我认为在转移 PHP服务器--->期间,您的数据会被分块。节点服务器

  • 我假设您正在使用本机https模块从Node端请求(如果我错了,请纠正我)

所以在data事件中你需要连接块。但是你只在end事件中解析它。如果您在data事件中进行解析,由于数据不完整,它会显示JSON.parse()的错误

以下是示例代码,它在我测试时使用500kb数据。基本上,本机节点在代码级别没有数据限制。

var http = require("https");

var options = {
  "method": "GET",
  "hostname": "c16db448-d912-4ce8-823a-db6c51e09878.mock.pstmn.io"
};

var req = http.request(options, function (res) {
  var chunks = '';

  res.on("data", function (chunk) {
    console.log(chunk.length)
    chunks += chunk;
  });

  res.on("end", function () {
    const object = JSON.parse(chunks)
    console.log(object.length)
    console.log(Buffer.byteLength(chunks, 'utf8') / 1024 + " kbytes");
  });
});

答案 1 :(得分:0)

让我猜一下,你正在使用正文解析器吗?这导致了一个问题。

Body Parser默认允许数据达到一定限度(我猜是100kB)。

要增加限制,请转到: 的 node_modules >的体解析器>的 LIB >的类型>的 json.js

寻找以下一行:

var limit = typeof opts.limit !== 'number'
? bytes.parse(opts.limit || '100kb')
: opts.limit

100kB 中的 100 替换为您要在应用程序中施加的限制。这应该解决它。

修改

如果您不想更改node_modules: 声明bodyparser变量时设置 limit 选项。

var bodyParser = require('body-parser');
bodyParser.json({limit: *your limit in bytes*});

这仅适用于JSON解析的情况。您可以将限制参数设置为raw,text,urlencoded格式,类似(请查看下面的文档链接)。

请参阅this

感谢@iofjuupasli建议可能有更好的方法。