我正在使用Node.js
在Express
中编写一个简单的应用程序。
我的脚本的路径就像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
。
如何解决?
答案 0 :(得分:2)
在path/to/script/server.js
中使用此设置(代替您可能已有的观看路径):
app.set('views', __dirname + '/views');
此设置的默认值为process.cwd() + '/views'
,这并非完全理想。但是,如上所述设置将确保views
目录相对于server.js
而不是当前工作目录。
答案 1 :(得分:2)
有两种解决方案,都是自以为是。
使用cd path/to/script && node server.js
。这会将您当前的文件夹更改为path/to/script
,然后运行server.js
。因此,process.cwd()
将返回所需的工作文件夹。
优点:如果还有其他代码依赖于当前工作文件夹,它也将开始工作。
缺点:它看起来不优雅,也会改变你的提示位置,即使你不想这样做。虽然它不是 omg hacks ,但经常被使用,特别是在编写cronjob文件和应用程序启动器时。
更改您的代码不依赖于当前的工作目录。即:app.set('views', __dirname + '/views');
将返回脚本的目录名,而不是启动应用程序的目录。
优点:通常被认为是良好的做法,没有副作用。
缺点:您可能需要在多个位置修改代码。然后,您的代码依赖于server.js
的位置,即views
文件夹所在的位置。
为什么这样?主要是因为工作目录是一个必不可少的信息,经常被使用或者你的利益,不仅仅是在没有正确设置的情况下破解。
它如何有用的示例:
想象一下,有两个网站具有相同代码但服务内容不同,代码位于/path/to/code
,数据位于/sites/www1
和/sites/www2
,然后可能会发生魔术:
cd /sites/www1 && node /path/to/code
。