Node.JS:fs.readFile 在 Ubuntu 上不起作用

Posted

技术标签:

【中文标题】Node.JS:fs.readFile 在 Ubuntu 上不起作用【英文标题】:Node.JS: fs.readFile not working on Ubuntu 【发布时间】:2018-06-08 12:16:45 【问题描述】:

我正在尝试读取一些 xml 文件,当我在我的计算机 (OS X) 中测试代码时,它工作得非常好,没有问题,但是当我在 DigitalOcean 的 Ubuntu 16 服务器中测试代码时,我得到了没有... 我正在使用fs.watch(),是的,它与路由无关,因为程序知道目录中有一个新文件,但是当我尝试读取 console.log 时什么也没打印。我已经尝试过readFile()readFileSync()... 我正在使用scp将文件发送到目录

当我将文件捕获到目录中时,我得到了 eventType 日志,而 console.log("filename: ",filename) 给了我文件的名称,所以,这就是为什么我建议 fs.readFileSync() 是问题所在

有什么建议吗?

    let dir = __dirname + '/../files/'
    fs.watch(dir, 'utf8',(eventType, filename) => 
      console.log("eventType: ", eventType)
      if(eventType === 'rename' && filename) 
        console.log("filename: ",filename)
        fs.readFile(`$dir$filename`, 'utf8', (err, data) => 
          if(err) console.log("error: ", err)
          console.log(data)
        ) 
   //  let data = fs.readFileSync(`$dir$filename`, 'utf8')
   //  console.log("DATA: ", data)<-- as I said, I've already tried with both, readFile() and readFileSync()
      
    );

【问题讨论】:

fs.watch 会触发吗?你得到一些“eventType”日志还是没有? 是的,fs.watch() 正在工作并在我将新文件发送到目录时记录下来。并且console.log("filename: ", filename) 毫无问题地向我发送了文件名。 @詹姆斯 也许发布你在日志中看到的内容,因为在你的问题中你说你什么也得不到。 我刚刚更新了帖子,@James 你试过fs.readFile(path.resolve(__dirname, filename), 'UTF-8', callback); 吗?我可能弄错了,但我认为 path.resolve 是获取文件路径的正确方法。 【参考方案1】:

path.resolve()readFile() 方法也有同样的问题。为了解决这个问题,我使用了resolve-path 和parseurl 库。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。

以上是关于Node.JS:fs.readFile 在 Ubuntu 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Node.JS:fs.readFile 在 Ubuntu 上不起作用

Node.js fs.readfile/异步文件访问:在回调中获取当前文件

[Node.js] Read a File in Node.js with fs.readFile and fs.readFileSync

HTTP 状态代码 200 但页面未加载 Node.js Socket.io -- 使用 Socket.io 的 Node.js 教程,Daniel Nill,fs.readFile(),socket

Node.JS文件系统解析

Node.js中内置文件系统一些常用的方法总结