在Node Js中逐个读取目录中的多个文件

时间:2018-06-09 13:12:23

标签: javascript node.js promise readfile

我正在尝试在文件夹中提供一堆文件,它应该读取每个文件并返回指定信息以获取正确的唯一路径“(这意味着/资源目录分别具有f1.txt,f2.txt文件,如同这/resource/f1.txt。)

单个文件的输出是:

{ url: 'account/43',    
  status: '200',    
  headers: [ 'content-type = application/text' ],    
  body: [ '{ name: XYZ }' ] }

我们存储的每个文件的url作为一个要检查的主要变量,如下所示代码适用于文件夹中的单个文件。动机在这里逐个读取所有文件并将输出保存在变量中。

const fs = require('fs')
const path = require('path')
const _ = require('lodash')

function parseFile(filePath) {
  let content
  let output = new Promise((resolve, reject) => {
    fs.readFile(filePath, function(err, data) {
    if (err) reject( err )
    content = data.toString().split(/(?:\r\n|\r|\n)/g).map(function(line) {
      return line.trim()
    }).filter(Boolean)
    resolve(processFile(content))
  })
})
  return output
}
if (require.main === module) {
  let p = parseFile( path.join(__dirname, '../resources/FileData1.txt') )
  p.then((results => {
    console.log(results.status)
  }))
}

任何建议都会很明显,谢谢!

1 个答案:

答案 0 :(得分:0)

问题是你只处理一个文件。首先,您需要检索所有文件,然后使用您的函数

步骤1 - 获取给定目录的所有文件 第2步 - 为每个文件创建承诺 第3步 - 使用Promise.allthen使用将包含所有结果的回调。

if (require.main === module) {
  let dir = path.join(__dirname, '../resources')
  let files = fs.readdirSync(dir) // gives all the files
  let promises = files.map(file => parseFile(path.join(dir, file))) // gives an array of promises for each file
  Promise.all(promises).then(console.log) // Uses Promise.all and resolves all supplied promises with their results. 
  // WIN
}

这将按files的顺序给出结果。

  

动机在这里逐个读取所有文件并将输出保存在变量中。   使用上面的方法,您不是逐个读取文件,而是利用promises的功能并允许它们同时运行。