2014-09-01 166 views
1

我正在使用ExpressNode.js中编写一个简单的应用程序。 我的脚本路径类似path/to/script/server.js。当我通过node server.js运行脚本,并且处于上述路径中时,一切正常。nodejs从绝对路径运行脚本

当我尝试运行trhough node path/to/script/server.js它给了我下面的错误的脚本:

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

viewspath/to/script/views

如何解决?

+0

你如何定义在'server.js'意见路径? – alandarev 2014-09-01 14:10:08

+0

只是'/ views' – steo 2014-09-01 14:14:12

回答

2

在你path/to/script/server.js使用此设置(代替你可能已经对你的看法路径):

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

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

+0

我试着用http://nodejs.org/api/all.html#all_process_chdir_directory但它不似乎工作 – steo 2014-09-01 14:14:41

+0

这个解决了,谢谢 – steo 2014-09-01 14:26:28

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文件夹所在的位置。


为什么会这样?主要是因为工作目录是一个非常重要的信息,经常被使用或者是你的好处,不仅仅是因为工作目录设置不当而被破坏。它怎么可能是有用的

例子:

想象一下,有两幅相同的代码,但不同的服务内容,代码位于/path/to/code和数据是/sites/www1/sites/www2,则能够创造奇迹:

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