Bash 从文件夹外部执行Node.js文件会中断文件路径

Bash 从文件夹外部执行Node.js文件会中断文件路径,bash,node.js,file-io,Bash,Node.js,File Io,我有一个名为“server.js”的Node.js文件 在脚本中,我使用以下方式打开一些文件: var certPem = fs.readFileSync('cert_and_key_dev.pem', encoding='ascii'); 使用bash shell,如果我将cd插入server.js所在的目录,并运行以下命令: [mybashshell]$node server.js 它有效,我没有出错。服务器启动并运行 现在,当我将cd从server.js文件所在的目录中取出时,再次运行相

我有一个名为“server.js”的Node.js文件

在脚本中,我使用以下方式打开一些文件:

var certPem = fs.readFileSync('cert_and_key_dev.pem', encoding='ascii');
使用bash shell,如果我将cd插入server.js所在的目录,并运行以下命令:

[mybashshell]$node server.js

它有效,我没有出错。服务器启动并运行

现在,当我将cd从server.js文件所在的目录中取出时,再次运行相同的shell命令来启动我的服务器

它抱怨我的“cert_and_key_dev.pem”文件路径被破坏

我没想到会发生这样的事。我认为正在执行的脚本文件中使用的路径应该是相对于脚本文件的,而不是相对于我执行bashshell命令的位置


有什么想法吗

将其放在脚本的开头

process.chdir(__dirname);
这会将进程的工作目录更改为正在执行的文件(
\uu dirname
)的目录路径

有关函数的详细信息,请阅读。

var path = require('path');
var key = path.join(__dirname, 'cert_and_key_dev.pem');
var certPem = fs.readFileSync(key, encoding='ascii');

如果出于任何原因,你不想
cd

LOL,谢谢大家,他们都很好,但我不知道该接受哪一个,希望我能给出两个答案。我将把它交给朱利安·兰尼根,因为他首先回答了问题,并且可以使用rep boost(希望你不介意chbrown)。当有疑问时,代码越少获胜。如果你不需要知道你的脚本是从哪个目录开始的,朱利安的答案会更好。但是请记住,在更改当前工作目录之前,你总是可以将它存储在一个变量中。调用
process.cwd()
此方法与chbrown给出的方法相比有什么好处吗?我很好奇哪种方法更合适。这真的取决于目的。如果您运行的是更多的“服务器”,我建议您改为
\uu dirname
。例如,如果您正在运行文件夹上载脚本,我建议您使用chbrown的代码。您必须权衡计划使用当前工作目录路径的频率,而不是当前脚本的目录路径。