【问题标题】:Send and receive a large json object in http在 http 中发送和接收一个大的 json 对象
【发布时间】:2018-06-28 07:08:20
【问题描述】:

我有一个配置是这样的。

使用 expressjs 在 Nodejs 上运行的客户端应用程序服务器。 API 服务器在 Nodejs 上使用 expressJs 运行,我正在使用 postgresql 数据库。

当我的客户端从 api server 请求数据时,api server 抛出错误

"*Error is  RangeError: Invalid string length*". 

我猜它的原因是,api 正在用一个非常大的 Json 对象数组来响应客户端,它是从数据库中获取的。

现在我的问题是,如何在 http 响应中发送如此大的 Json 对象?而如果发送成功了,在客户端如何处理呢?

我遇到了 JSONStream 模块。但是,我找不到一个可以在我的场景中选择工具的好例子。

【问题讨论】:

    标签: node.js nodejs-stream jsonstream


    【解决方案1】:

    我认为 BodyParser 会有所帮助..

    var bodyParser = require('body-parser');
    
     app.use(bodyParser.urlencoded({
        parameterLimit: 100000,
        limit: '50mb',
        extended: true
      }));
    

    这将增加 json 的大小超过 http 请求和响应

    你也可以查看:-

    const fs = require('fs');
    const server = require('http').createServer();
    
    server.on('request', (req, res) => {
      const src = fs.createReadStream('./big.file');
      src.pipe(res);
    });
    
    server.listen(8000);
    

    参考-Freecodecamp link

    【讨论】:

      【解决方案2】:

      每当我们必须处理更大的数据并因此而面临问题时,在这种情况下,应始终以块的形式获取数据,而不是一次加载所有数据。 所以在你的场景中,我建议你分部分加载数据。

      【讨论】:

      • 我不能接受这是一个答案。我的问题是如何在 http 响应中发送这么大的 json 对象。如果您建议以块的形式发送它,我如何将它分成块并以相同的方式发送响应,我怎样才能以相同的顺序在客户端获取相同的数据?任何例子都非常感谢。
      • 请坚持解决方案而不是荒谬的建议。并非所有系统都处于测试模式以允许修改。
      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多