2013-02-20 125 views
3

一個非常簡單的問題,但困擾我很多。NodeJS url請求,絕對還是相對?

以下兩種情況有什麼區別?

index.html 

- script src="script/a.js" 
- script src="/script/a.js" // starting with slash 

,爲什麼我的服務器可以服務於這個請求(有斜槓開始)

app.get('/script/a.js', function(req, res){ // with slash 
    res.sendfile(__dirname + '/realfolder/script/a.js'); 
}); 

無論在客戶端的URL SRC是我剛纔提到的這兩個案件的任何情況下?

在另一方面,我總是得到404錯誤,如果我發球以下列方式請求(啓動時沒有斜槓)

app.get('script/a.js', function(req, res){ // without slash 
    res.sendfile(__dirname + '/realfolder/script/a.js'); 
}); 

在我看來,路徑從「/」指的根文件夾開始的應用程序,另一種是從__dirname的相對路徑。我不明白爲什麼我的服務器不能處理app.get('script/a.js')這個請求在開始時沒有斜線?

有什麼問題嗎?

回答

3

當一個路徑以斜槓開始/這意味着它是一個絕對路徑。 當它不以斜槓開始時,它是相對路徑。

讓我們來看一個例子。想象一下,我的硬盤只有下列文件夾:

main 
    subfolder1 
    subfolder2 
     lastfolder 

現在想象一下,我們在文件夾subfolder2,我們要加載的文件是內部lastfolder。我們可以用一個相對路徑加載:

lastfolder/file.txt 

但是,我們也可以使用絕對路徑:

/main/subfolder2/lastfolder/file.txt 

兩個路徑是正確的,但如果我們把相對人可以失敗到另一個文件夾(例如,如果我們在subfolder1),而絕對路徑將永遠是正確的(如果我們不修改文件夾當然)。

+0

謝謝,我想我知道這個概念。但我仍然無法理解爲什麼我的服務器無法處理app.get('script/a.js')這個請求在開始時沒有出現任何問題? – Kevin 2013-02-20 08:37:25

+0

好吧,當相對路徑不起作用時,第一個問題是:我在哪裏?我在'main'文件夾中嗎?在'subfolder1'裏面?在你的情況下,你的Node應用程序在哪裏運行?請參閱:http://nodejs.org/docs/v0.4.2/api/process.html#process.cwd或使用絕對路徑。 – TheBronx 2013-02-20 08:43:39

+0

只是確保一件事,你的意思是當出現失敗的相對路徑時,服務器端將嘗試從app根目錄(process.cwd(),如你所說)找到這個文件? – Kevin 2013-02-20 09:21:39