簡體   English   中英

對於Express.js 4.x,可以兩次使用express.static嗎?

[英]For Express.js 4.x, is it possible to use express.static twice?

我想顯示一個自定義的404頁面(包含html,css,img和ico)。 我知道當我替換第一個公共靜態主頁時,我的404文件夾可以工作。 但是,我相信我要么沒有正確使用路由,要么無法設置兩個靜態文件夾。

我根本不想使用模板視圖引擎。 我希望所有內容都在前端呈現。

我的項目如下所示:

404
--index.html
--error.css
--404.jpg
bin
--server.js
public
--index.html
routes
--index.js
package.json
app.js

app.js

...
var index = require(./routes/index); //works
...
app.use(favicon(__dirname + '/public/content/images/logo.ico'));
app.use(logger('dev'));
app.use(jsonParser);
app.use(urlencodedParser);
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public'))); //love it
app.use('/', index); //this is fine
...

index.js

var express = require('express');
const path = require('path');
var router = express.Router();

router.use(function timeLog(req, res, next) {
    console.log('Time: ', Date.now());
    next();
});

router.use('/', express.static(path.join(__dirname, './404'))); // HALP!

module.exports = router;

我玩過目錄(嘗試使用“ 404”和“ ./404”)。 我正在通過輸入“ localhost:3000 / error”進行測試。 因此,如果我的路徑是“ /錯誤”,它仍應使用父路徑:“ /”。 文檔指出,只要將我的路線放在最后,它就應該仍然有效。 我在沒有express.static的情況下對其進行了測試,並使用了一個在控制台上打印錯誤的anon函數。

不可能兩次使用express.static()嗎?

https://github.com/jekku/users/blob/master/server.js#L41

這是我在ExpressJS應用上路由靜態文件的方式。 我通常不會在路線中這樣做,但我將其視為“初始化”過程。 可以使用任何中間件兩次甚至更多次-盡可能多地使用,記住這一點。

將我的一些評論移到答案中,因為這可以為您解決。

對於Express.js 4.x,可以兩次使用express.static嗎?

是的,您可以根據需要多次使用express.static() 它是中間件,如果找不到與請求匹配的文件,則僅調用next()並允許中間件鏈繼續。 因此,您可以根據需要擁有任意數量的文件,並且每個文件都可以按照注冊它們的順序搜索匹配的文件。

我想顯示一個自定義的404頁面(包含html,css,img和ico)。 我知道當我替換第一個公共靜態主頁時,我的404文件夾可以工作。 但是,我相信我要么沒有正確使用路由,要么無法設置兩個靜態文件夾。

您錯誤地嘗試使用express.static()來實現自定義404頁面。 那不是它的作用。 實現自定義404頁面的通常方法是使用鏈中的最后一個中間件處理程序。 遇到問題時,找不到與當前請求匹配的其他內容,因此您發送自定義404頁面。

通常看起來像這樣:

app.use(function(req, res, next) {
    res.status(404).sendFile(localPathToYour404Page);
});

請參閱此Express Starter常見問題解答的“我如何處理404響應”部分。

而且,這是有關自定義錯誤頁面文章,其中顯示了其他一些示例。

暫無
暫無

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

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