我正在嘗試為我的 express js 網站撰寫一個中間件,以便我可以使用子域。我也想使用靜態影像、css 和 js 服務。我的 HTML 頁面加載得很好,但是每當我嘗試呼叫 .js 檔案時,我的頁面加載時間都很長,并且 js 無法加載。
任何幫助表示贊賞,謝謝!:)
app.use("/assets", express.static(path.join(__dirname, "assets")));
app.get("*", (req, res, next) => {
let host = req.get("host").split(".");
console.log(req.originalUrl);
let url = req.originalUrl.split("/");
url.shift();
console.log(url);
if (host.length > 2) {
res.send("myWebsite.com");
} else {
const pages = Page.getPages();
pages.forEach(page => {
if ((url[0] == "" ? "home" : url[0] ?? "home").toLowerCase() == page.name) {
if (url.length == 1 || (url.length == 2 && url[1] == "")) {
page.publish(res);
}
}
});
}
});
uj5u.com熱心網友回復:
所以,在Pages.html,你有這個:
<script type="text/javascript" src="/assets/js/Pages.js"></script>
express.static()從您的assets/js檔案夾中加載 Pages.js看起來通常與您的陳述句(如下所示)兼容:
app.use("/assets", express.static(path.join(__dirname, "assets")));
但是,然后該Pages.js腳本立即開始:
import Page from '../../Page.js';
當瀏覽器請求時,這將不起作用。請記住import,在瀏覽器中運行的 Javascript 陳述句中的路徑與網頁的當前 URL 相關。瀏覽器將嘗試將該相對 URL 與網頁的 URL 結合起來,然后向您的服務器請求新構建的 URL。
在這種情況下,您最終會收到類似于http://somehost/../../Page.js. 但是,您的服務器中沒有任何路由可以處理該問題。默認情況下會express.static()跳過包含的任何路由,../因為這可能是一個令人討厭的安全問題(允許攻擊者在您的服務器檔案系統周圍獲取東西)。因此,在嘗試獲取該檔案時,您可能最終會遇到 404 錯誤。
您希望瀏覽器能夠加載的所有檔案,包括嵌入在其他 JS 檔案中的匯入,都必須位于您的公共assets檔案夾(或您已明確啟用公共訪問權限的其他檔案夾,例如express.static())。
僅供參考,如果您查看瀏覽器控制臺,您可能會看到錯誤訊息,這些訊息會指示您在哪里查找錯誤。
uj5u.com熱心網友回復:
__dirname 是一個環境變數,它告訴您包含當前正在執行的檔案的目錄的絕對路徑。您必須確保最終包(您的資產檔案夾)存在于該目錄中。嘗試對資產絕對路徑進行硬編碼,如果可行,請改用以下代碼段:-
app.use("/assets", "express.static(process.cwd() '/assets'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/363063.html
標籤:javascript 节点.js 表达 网络 中间件
上一篇:htaccess:快取所有影像但從子檔案夾中排除快取影像
下一篇:SSG如何在Nuxt中作業?
