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