嗨,即使經過大量的搜索,我仍然困惑,什么是正確的方式來部署我的反應應用程式創建的create-react-app與Express作為后端。
我運行了npm run build,創建了build檔案夾。我復制了build檔案夾作為express的靜態檔案夾,并把
app.use(express.static('build'));。
它在主頁上作業得很好,當我運行我的Express節點服務器時,主頁打開了,但當我進入主頁以外的任何其他鏈接時,它給出了404。
在開發者模式下一切都很正常,我通過npm start命令運行。我只想知道我在這里做了什么。讓我知道更多的資訊來了解這個問題。謝謝你。
uj5u.com熱心網友回復:
聽起來你沒有運行后端服務器。你需要npm啟動你的服務器,然后再npm啟動你的前端,如果這有意義的話。它們是兩個獨立的東西。
uj5u.com熱心網友回復:
你在使用客戶端路由嗎?一個流行的實作是react-router。
假設您試圖訪問/page1,客戶端路由所做的是使用JS在不同的組件之間切換以 "偽造 "路由,而不是渲染一個新的HTML。
然而,在默認情況下,當你改變路由時,瀏覽器會做一些常規的事情,并向服務器發送一個GET請求,要求提供相應的HTML檔案。但是由于你只提供了index.html,這就是為什么你收到了404。
你需要在你的app.js的末尾添加以下內容,就在你呼叫你的express的app.listen之前,告訴服務器總是回傳index.html,無論它收到什么路徑。
/* client-side routing.
* 對于來自任何路由的GET請求(除了上面指定的那些)。
*從 "build "檔案夾中向客戶端發送 "index.html "檔案。
*/
app.get("*", (_, res) =>/span> res. sendFile("index.html"/span>, { root: "build" })。
//你平常的app.listen。
app.listen(port, () => console.log("Listening") ) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/306890.html
標籤:
上一篇:按組組合、合并、凝聚行,用另一個值替換某些值,而不需要透視。
下一篇:型別提示一個陣列
