我的代码中遇到了由于输出太大而导致的错误。
考虑以下代码:
index.js:
const { spawn } = require('child_process');
const dirs = spawn('dir', { shell: true });
let fs = require('fs'),
path = require('path')
dirs.stdout.on('data', (data) => {
const wlist = fs.readFileSync(path.join(__dirname, 'wlist.txt'), 'utf-8')
.split('\n')
.filter((line) => line.trim() !== '')
for (let word of wlist) {
console.log(`stdout: ${data}`);
}
});
对于单词列表中的每个项目,控制台都会记录生成命令的输出-良好,全部。但是,如果服务器具有从“ dir”命令返回的一百万个项目怎么办?好吧,这发生了:
错误:
RangeError [ERR_CHILD_PROCESS_STDIO_MAXBUFFER]: stderr maxBuffer length exceeded
我不能仅仅重新设置缓冲区限制,因为它将限制正在运行的主机。
从概念上讲,我认为可以将输出分成某种形式,然后按部分记录它们-但是,这是一个牵强的想法,我不知道该如何暗示。
主要问题:
在上述情况下,建议使用哪种方式处理此数量的数据? 谢谢。
答案 0 :(得分:0)
我认为这可以回答您的问题 how-to-stream-read-directory-in-node-js
data
属性对于NodeJS来说太大了,无法处理。
Stream将解决它-您当前的解决方案是一次提取n个目录。