2012-11-18 60 views
6

我有一个名为“server.js”的Node.js文件。从文件夹外执行Node.js文件中断文件路径

在脚本中,我使用的东西就像打开某些文件:

var certPem = fs.readFileSync('cert_and_key_dev.pem', encoding='ascii'); 

使用bash shell,如果我cd到其中server.js是,并运行该命令的目录:

[mybashshell] $节点server.js

它的工作原理,我没有错误。服务器启动并运行。

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

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

我并不期待这样的事情发生。我虽然正在执行的脚本文件中使用的路径应该是相对于脚本文件,而不是执行我的bash shell命令的位置。

任何想法?

回答

13

把它放在脚本的开头。

process.chdir(__dirname); 

这将改变进程的工作目录到正在执行的文件(__dirname)的目录路径。

有关功能的更多信息,请阅读this

+0

这个方法与chbrown给出的方法有什么区别吗?我很好奇哪种方法更合适。 – Zhang

+0

这真的取决于目的。如果你运行更多的“服务器”,我会建议改成'__dirname'。例如,如果您正在运行文件夹上传脚本,我会建议使用chbrown的代码。您必须权衡计划在当前脚本的目录路径上使用当前工作目录路径的频率。 –

7

或者

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

如果你不想cd无论出于何种原因。

+0

大声笑,谢谢你们,他们都工作,但我不知道哪一个可以接受,希望我能给出两个答案。我会把它交给Julian Lannigan,因为他先回答并可以使用rep升压(希望你不介意chbrown)。 – Zhang

+1

如有疑问,代码获胜的次数会减少。如果你不需要知道你的脚本是从哪个目录开始的,Julian的答案会更好。 – chbrown

+0

但是请记住张,你可以在改变之前将当前工作目录存储在一个变量中。调用'process.cwd()' –