簡體   English   中英

強制React-Router應用將URL請求發送到服務器

[英]Force react-router app to send URL requests to server

我正在開發帶有React Router的React App,該Server托管着React App本身和REST API。 路由器是react-router-redux中的ConnectedRouter。 據我了解,一旦您在瀏覽器中打開了應用程序,就不會從服務器請求對URL進行任何更改,而是會在React Router中處理客戶端,即使您重新加載頁面或在地址欄中手動寫一些內容。

首次打開該應用程序時,實際的HTML,JS和CSS文件是從Web服務器加載的,該服務器配置為僅在授權用戶的情況下才提供服務。 這樣,服務器可以將用戶重定向到第三方身份驗證站點,或者在用戶經過身份驗證但未經授權的情況下提供401消息。 但是,當用戶會話過期,他注銷或權限更改從而不再授權他打開應用程序時,就會發生問題。 然后,當用戶在以前已緩存應用程序的瀏覽器中打開該應用程序時,它似乎可以正常打開,但是會出現很多錯誤,因為現在每個API調用都會失敗。

為了解決這個問題,我想在API調用失敗時告訴用戶重新加載頁面,以便向服務器發出請求以獲取應用程序(index.html等),以便將他重定向到第三個第三方認證站點。 但是,常規的瀏覽器重新加載(F5)不會削減它。 該請求被react-router吞沒,並且從未命中服務器。 window.location.reload()也是這種情況。 硬重載,即Ctrl + F5似乎可以解決問題,至少在chrome中是這樣,但是有些用戶可能不明白。 因此,我想為用戶提供一個“硬重載”按鈕,該按鈕臨時告訴react-router產生url請求,以便它們可以傳遞到服務器並嘗試獲取index.html。

所以我的問題是:我該如何臨時性地以編程方式強制客戶端應用程序允許URL請求正常發送到服務器,而不是在react-router中本身處理它們?

或者,如果不可能,如何以編程方式從瀏覽器的內存中清除該應用程序,以使其被迫再次請求服務器?

編輯:似乎我的假設是,請求被react-router吞沒了。 它是create-react-app框架中的服務工作者。 服務人員公開了一個注銷功能,該功能解決了我的問題。

據我了解,一旦您在瀏覽器中打開了應用程序,就不會從服務器請求對URL進行任何更改,而是會在React Router中處理客戶端,即使您重新加載頁面或在地址欄中手動寫一些內容。

這不是真的。 手動更改地址欄中的內容(並按Enter鍵)后,您始終始終會先點擊服務器路由器。

無論命中哪個URL,您的服務器很可能始終呈現包含React應用程序的index.html 類似於以下內容:

app.use(express.static(path.join(__dirname, 'dist')));
app.get('*', function(req, res) {
    res.sendfile('./dist/index.html');
});

確保您的API請求與此不沖突。 如果可能,請共享一些代碼,以便我們可以回顧可能出現的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM