节点中fs.readdirSync大目录目录的替代方法

我有一个单一的目录中有几百万个json文件。 我最终想遍历目录中的每个文件,读取它,用这些信息做一些事情,然后写入一个数据库。

当我用几百个文件使用testing目录时,我的脚本完美地工作。 但是,当我使用真实目录时,它会停止。 我坚信我已经指出这个问题的使用:

fs.readdirSync('my dir path') 

将其转换为asynchronous函数将无济于事,因为在任何其他事情发生之前,我需要文件名。 不过,我相信这个操作是挂起的,因为它只是“花费太长时间”来读取整个目录。

这里作为参考是function的更广泛的部分:

 function traverseFS(){ var path = 'my dir name and path'; var files = fs.readdirSync(path); for (var i in files) { path + '/' + files[i]; var fileText = fs.readFileSync(currentFile,'utf8'); var json= JSON.parse(fileText); if(json) // do something } } 

我的问题是:

  1. 有什么我可以做到这一点使用readdirSync?
  2. 有我应该使用的另一个操作?

你需要使用一个subprocess(最简单)来创build一个目录列表并parsing该subprocess, 或者将自己的stream传输绑定到scandir() (on * nix)和/或任何等效的Windows上并使用它。 对于后者,您可能需要使用libuv代码( * nix , Windows )作为指导。