javascript - 为什么这个 fs 循环读取文件名而不是它们的内容?

标签 javascript node.js

我要做的是输出一个文件夹下所有文件的内容:

  const fs = require('fs')
      , input = process.argv[2]



  fs.readdir(__dirname + `/${input}/`, (err, files) => {
    if (err) {
      console.log(err)
      return
    }

    files.forEach((file) => {
      console.log(file)

      fs.readFile(file, 'utf8', (err, data) => {
        console.log(data)
      })
    })
  })

但我很困惑 console.log(file) 输出文件名:

alex@alex-K43U:~/node/m2n/bin$ node index4.js folder
test.txt
test2.txt

但是 console.log(data) 返回 undefined:

alex@alex-K43U:~/node/m2n/bin$ node index4.js folder
undefined
undefined

这里发生了什么?

编辑:

也许 __dirname 有问题?这是我的项目结构:

enter image description here

最佳答案

您需要传递文件名的完整路径:

fs.readFile(__dirname + `/${input}/` + file, 'utf8', (err, data) => {

而且我会建议您记录错误,这样您下次就会知道发生了什么错误:

fs.readFile(__dirname + `/${input}/` + file, 'utf8', (err, data) => {
  if (err) {
    console.log(err)
  }
  console.log(data)
})

关于javascript - 为什么这个 fs 循环读取文件名而不是它们的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301879/

相关文章:

node.js - 使用node.js时Twitter API请求错误

node.js - process.nextTick 的回调是否按顺序调用?

node.js - 解析 '...THtwvnO2F9FWD7HrMJoGZ' 附近时 JSON 输入意外结束

javascript - 似乎无法通过 bool 值设置我的组件的样式

javascript - 控制 AJAX 请求

javascript - 在 title 属性中将单引号转换为双引号

javascript - 获取 Angular 折扣百分比

node.js - 浏览器化和 bower 。规范方法

javascript - jquery过滤掉特定元素

node.js - Node.js中如何以非阻塞的方式从子进程向父进程发送大量数据?