2017-07-27 106 views
1

我做了生物醫學的網站的node.js和我遇到的一個問題靜態ressources錯誤404: 在我app.js(服務器文件),我有這些代碼蒙山上的GET請求參數

app.get('/disease/:orphanetID', function(req, res) { 
var orphanetID=req.params.orphanetID; 
res.render('pages/disease.ejs', {activetitle: "views"}); 
}); 

的問題是,在disease.ejs所需的所有靜態ressources得到一個錯誤404

例如,對於這個代碼disease.ejs:

<script src="static/js/DOMscripts.js"></script> 

在Chrome CONSO嘞,我看到:

(red cross) GET http://localhost:8080/disease/static/js/DOMscripts.js 

的事情是,我的靜態的ressource爲http://localhost:8080/static/js/DOMscripts.js,但只是在出現......這不是好網址URL字符串「病」!

和測試一些東西之後,我想通了,此代碼工作:

app.get('/disease', function(req, res) { 
//var orphanetID=req.params.orphanetID; 
res.render('pages/disease.ejs', {activetitle: "views"}); 
}); 

所以,如果我沒有任何參數,它的工作,但我需要它。

有關信息,我對代碼的靜態ressources是:

app.use('/static', express.static(__dirname + '/public')); 

我應該怎麼做纔能有一個參數?

+0

將頁面相對URL用於靜態資源通常是一個問題,因爲它告訴瀏覽器在向服務器請求頁面URL之前將頁面URL的路徑添加到靜態資源URL,這很少是您想要的。設置你的靜態資源,使它們都以'/'開頭。 – jfriend00

回答

0

更改腳本路徑:

<script src="/static/js/DOMscripts.js"></script> 
+0

泰克斯,它的工作:) – Charles

+0

@ charles完美;)隨時給予upvote或勾選綠色複選標記... –

0

爲了解釋了很多這裏發生了什麼,當你不使用///adomain.com/http://adomain.com/開始你的靜態資源的URL,然後在瀏覽器進行相對這些網址到頁面的URL。

所以,如果網頁網址爲:

http://adomain.com/disease/194 

,你必須在頁面中的資源被指定爲:

static/js/DOMscripts.js 

那麼瀏覽器就會通過請求URL從服務器將頁面的路徑與資源的相對URL組合起來,以便您得到以下請求:

http://adomain.com/disease/static/js/DOMscripts.js 

但是,你的服務器並不期待這一點。你的服務器要求:

http://adomain.com/static/js/DOMscripts.js 

因此,要解決這個問題,你讓你的URL開始與/。這使得它僅相對於頁面的域而不是頁面的路徑,並且瀏覽器將請求您期望的資源的URL。