2017-03-24 87 views
0

我正在使用React BrowserHistory進行導航。我希望從我的節點服務器提供相同的文件,而不管URL路徑如何。節點從所有路徑提供相同的資源

我的服務器代碼:

const http = require('http'); 
const path = require('path'); 
const express = require('express'); 
const app = express(); 
const hostname = 'localhost'; 

app.use(express.static('../public')); 

app.get('*', (req, res)=>{ 
    res.sendFile(path.join(__dirname, '../public/index.html')); 
}); 

const port = process.env.PORT || 8007; 
app.listen(port,()=>{ 
    console.log('Production Express server running at localhost:' + port) 
}); 

http://localhost:8007 =>工作正常

http://localhost:8007/help =>工作正常

http://localhost:8007/help/faq =>失敗

我希望所有的URL返回相同的資源,服務於../public。但是,似乎express.static不從根目錄請求資源時不起作用。所以,例如,當瀏覽器要求<script src="scripts/main.js"></script>時,它認爲我想要../public/help/scripts/main.js,而我實際上需要../public/scripts/main.js/。所以,因爲express沒有找到這樣的文件,所以它移動到app.get('*'...,當請求腳本時它將返回../public/index.html文件。

因此,所需的行爲是:

  • 換取任何路徑相同的index.html(與任意數量的子文件夾),並讓它再反應弄清顯示
  • 回報的資源總是相對於index.html的是從,不相服的路徑在URL

它的工作原理,當我用我的資源請求(即<script src="http://localhost:8007/scripts/main.js"></script>)絕對路徑的路徑,但是寫這樣說,這顯然ISN」因爲它需要ch當它被託管在其他地方時變得黯淡

我該怎麼辦?

+1

這就是當你有相對URL請求這樣的腳本時會發生什麼,不管服務器如何,只要把它改成'