Node.js NodeJS response.send()因大字符串而崩溃
很简单,我的节点服务器由于内存不足(字符串太大)而崩溃 我正在尝试返回从猫鼬发送的非常大的数据Node.js NodeJS response.send()因大字符串而崩溃,node.js,express,Node.js,Express,很简单,我的节点服务器由于内存不足(字符串太大)而崩溃 我正在尝试返回从猫鼬发送的非常大的数据 response.send({success: true, message: "Data Report Generated", result: <very very large array>}) response.send({success:true,消息:“数据报告已生成”,结果:}) 我已经在node命令中使用--max_old_space_size=14000标志为节点服务器分
response.send({success: true, message: "Data Report Generated", result: <very very large array>})
response.send({success:true,消息:“数据报告已生成”,结果:})
我已经在node命令中使用--max_old_space_size=14000标志为节点服务器分配了14GB内存,我不想添加更多内存
我别无选择,需要一个解决方案 解决这个问题有很多可能性。您没有向我们提供有关数据或应用程序的任何详细信息,因此我们只能提供一般建议:
JSON.stringify()。当每一层都在发送数据时,内存中会同时出现多个数据副本
如果您展示了正在发送的一部分数据,并解释了希望向客户端发送这么多数据的整个应用程序,我们也许可以帮助您改变设计,这样您就不必一次发送那么多数据,或者建议更有效的发送方式。而不是一次从mongoose读取所有数据,您可以使用以读取流的形式获取数据,并通过管道将数据流发送到响应,在读取所有数据后,调用response.end以完全填充请求
const queryStream=Model.find().stream();
queryStream.pipe(响应);
queryStream.on('end',()=>response.end());
在客户端,像往常一样发送ajax调用,一旦所有数据流传输完毕,它就会被解析
this.http.get('http://api_endpoint')
.订阅((数据)=>{
// ...
});
1)您能以任何方式分解数据吗?比如多个请求?2) 或者您可以使用Stream:为您缓冲数据吗?理想情况下不需要,因为我需要完整的数据,以便将其导出到.csv文件,并在角度前端进行操作。这很有趣,但我的前端将如何解释和等待这一切?我使用angular 7作为前端部件。您好@kjohnson编码器请查看更新的答案。