想弄清楚这一点,我有点发疯了。我有一些证书需要从我的 api 传递给身份验证客户端;但是,即使该文件明显存在于同一目录中,应用程序仍会继续抛出 ENOENT 异常(我已经对此进行了确认)。我正在使用 readFileSync,有效地执行以下操作:
key: fs.readFileSync('./privateKey.pem'),
奇怪的是,如果我在独立 Node 服务器上运行它而不是作为 api 的一部分,则可以毫无问题地找到该文件。在这种情况下尝试使用 readFileSync 时是否有一些我不知道的注意事项?
谢谢!
最佳答案
在 node
您需要非常小心相对文件路径。我唯一真正使用过它们的地方是require('./_____')
。语句,其中 ./
意思是“相对于这个文件”。但是,require
是一种特殊情况,因为它是 node
的函数自动创建每个文件,因此它知道当前文件的路径。
一般来说,标准函数无法知道包含恰好调用函数的脚本所在的目录,因此几乎在所有情况下,./
表示相对于当前工作目录(运行时所在的目录 node <scriptname>.js
)。唯一不是这种情况的情况是,如果您的脚本或您使用的模块显式调用 process.chdir
将工作目录设置为其他内容。相对于当前脚本文件引用文件的正确方法是通过使用 __dirname + '/file.js'
显式使用绝对路径。 .
关于node.js - ENOENT 在 Express Endpoint 上没有用于 readFileSync 的此类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073374/