2014-09-01 92 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