1

我正在使用react路由器來定義路由。我正在使用create-react-app進行開發。我的問題是,如果我在地址欄中鍵入子頁面的url並嘗試訪問它在開發版本中工作,但不在生產版本中。React路由在facebook的create-react-app版本中不起作用

我使用AA簡單Express服務器託管的生產建設

var express = require('express'), 
    app = express(), 
    http = require('http'), 
    httpServer = http.Server(app); 

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

app.get('/', function(req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 
app.listen(3001); 
+0

哪個URL?主要的一個 - yourdomain.com/或一個子頁面 - yourdomain.com/some/page/123? –

+0

@HoriaComan子頁面 – Bhuthaya

回答

4

您必須配置Web服務器服務於同一頁面您已經定義了所有路由,或實現服務器端渲染陣營。開發Web服務器可能是這樣配置的,但生產版本(Apache?Nginx?別的?)不是。 This question可能會有所幫助。

這就是爲什麼React用於構建單頁應用程序。你有一個傳統的網頁,它加載了一些腳本 - 最有可能的構建過程的輸出,然後這些腳本負責其他的一切。這包括生成新的DOM,向「服務器」發送數據請求,甚至在視圖更改時通過操作URL來僞造多頁應用行爲。這最後一點是反應路由器所做的。

但是,Web服務器通常對這些事情並不在意。他們知道如何提供網址。當你申請yourmainmain.com/時,他們會提供該主頁面,但是當你申請你的域名.com/some/page/123時,他們將不知道該如何提供服務,除非特別配置。另一種配置是返回這些其他URL的主頁面的內容。反應路由器將拿起的URL和使用正確的組件,所以一切都會看起來OK>

+1

更具體地說,作者希望在提供'index.html'的處理程序中將'/'更改爲'/ *'。 –