nodejs从绝对path运行脚本
我正在使用Express
在Node.js
编写一个简单的应用程序。 我的脚本path/to/script/server.js
就像path/to/script/server.js
。 当我通过node server.js
运行脚本,并在上面的path中,一切正常。
当我尝试运行脚本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
。
如何解决?
在你的path/to/script/server.js
使用这个设置(代替你已经有的视图path):
app.set('views', __dirname + '/views');
这个设置的默认值是process.cwd() + '/views'
,这并不完全理想。 但是,如上所示设置它将确保views
目录相对于server.js
而不是当前的工作目录。
有两个解决scheme,都是有见地的。
-
使用
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
。