nodejs从绝对路径运行脚本

时间:2014-09-01 14:03:08

标签: javascript node.js express

我正在使用Node.jsExpress中编写一个简单的应用程序。 我的脚本的路径就像path/to/script/server.js。当我通过node server.js运行脚本并且我在上面的路径中运行时,一切都运行良好。

当我尝试运行脚本trhough node path/to/script/server.js时,它会给我以下错误:

Error: Failed to lookup view "index.html" in views directory "d:\views"
   at Function.app.render [...]

我的views位于path/to/script/views

如何解决?

2 个答案:

答案 0 :(得分:2)

path/to/script/server.js中使用此设置(代替您可能已有的观看路径):

app.set('views', __dirname + '/views');

此设置的默认值为process.cwd() + '/views',这并非完全理想。但是,如上所述设置将确保views目录相对于server.js而不是当前工作目录。

答案 1 :(得分:2)

有两种解决方案,都是自以为是。

  1. 使用cd path/to/script && node server.js。这会将您当前的文件夹更改为path/to/script,然后运行server.js。因此,process.cwd()将返回所需的工作文件夹。

    优点:如果还有其他代码依赖于当前工作文件夹,它也将开始工作。

    缺点:它看起来不优雅,也会改变你的提示位置,即使你不想这样做。虽然它不是 omg hacks ,但经常被使用,特别是在编写cronjob文件和应用程序启动器时。

  2. 更改您的代码不依赖于当前的工作目录。即:app.set('views', __dirname + '/views');将返回脚本的目录名,而不是启动应用程序的目录。

    优点:通常被认为是良好的做法,没有副作用。

    缺点:您可能需要在多个位置修改代码。然后,您的代码依赖于server.js的位置,即views文件夹所在的位置。


  3. 为什么这样?主要是因为工作目录是一个必不可少的信息,经常被使用或者你的利益,不仅仅是在没有正确设置的情况下破解。

    它如何有用的示例:

    想象一下,有两个网站具有相同代码但服务内容不同,代码位于/path/to/code,数据位于/sites/www1/sites/www2,然后可能会发生魔术:

    cd /sites/www1 && node /path/to/code