处理范围错误的推荐方法是什么

时间:2019-06-05 04:53:23

标签: node.js

我的代码中遇到了由于输出太大而导致的错误。

考虑以下代码:

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

我不能仅仅重新设置缓冲区限制,因为它将限制正在运行的主机。

从概念上讲,我认为可以将输出分成某种形式,然后按部分记录它们-但是,这是一个牵强的想法,我不知道该如何暗示。

主要问题:

在上述情况下,建议使用哪种方式处理此数量的数据? 谢谢。

1 个答案:

答案 0 :(得分:0)

我认为这可以回答您的问题 how-to-stream-read-directory-in-node-js

data属性对于NodeJS来说太大了,无法处理。 Stream将解决它-您当前的解决方案是一次提取n个目录。