簡體   English   中英

Node.js:一次重定向並發送頁面

[英]Node.js: Redirect and send page at once

我正在嘗試為Node.js中的HTML頁面構建簡單的服務器。 我的問題是,當我導航到(例如) http://localhost:8080/someDirectory ,瀏覽器認為someDirectory是文件(實際上,它在內部被重定向到someDirectory/index.html )。

因此,當我執行<script src="./script.js"></script> ,它將嘗試使用http://localhost:8080/script.js而不是http://localhost:8080/someDirectory/script.js

我能想到的唯一解決方案是將瀏覽器重定向到/someDirectory/ (末尾帶有斜杠)。 然后,瀏覽器正確地知道它是目錄而不是文件。

我的問題是,由於雙重請求,我不想讓我的服務器變慢(客戶端被重定向,發送另一個請求,然后最終獲得網頁)。 是否有發送發送頁面並僅通知瀏覽器更改的可能性,而不是使用302標頭重定向?


編輯:當我訪問在Apache服務器上運行的某些頁面時,當我輸入http://localhost/someDirectory ,尾部的斜杠會自動添加。 我只是很好奇它的完成方式(沒有其他PHP或javascript)。

不,這是不可能的,甚至不是正確的解決方案。 您當然可以通過重定向發送內容,但這毫無意義,因為瀏覽器不會顯示它……它會立即跟隨重定向。

如果要/someDirectory/ ,則與/someDirectory不同。 您必須重定向。

我建議使用history.replaceStateMDN )。 這將適用於大多數現代瀏覽器(大多數用戶),但不適用於較舊的瀏覽器。 由於較舊的瀏覽器正在逐漸減少,因此隨着時間的流逝,它應該不再是一個問題。 這應該可以解決問題-您需要將其直接粘貼到HTML標記中才能正常工作:

if ( !window.location.pathname.match(/\/$/) ) {
    if ( window.history && window.history.replaceState ) {
        window.history.replaceState(null, null, window.location.pathname + '/');
        document.write('<script src="./script.js"></script>');
    } else
        window.location.replace( window.location.pathname + '/');
} else {
    document.write('<script src="./script.js"></script>');
}

暫無
暫無

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

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