gpt4 book ai didi

javascript - 从 Express 路由器中排除公用文件夹

转载 作者:行者123 更新时间:2023-11-30 13:50:23 32 4
gpt4 key购买 nike

我想从 express 路由器中排除 public 文件夹和所有静态文件和子文件夹。

目前我已经定义了 1) 公用文件夹,2) 路由器,如 several 中所建议的那样顺丰回答:

        // public folder
self.app.use(express.static(path.join(__dirname, 'public')));

// static pages
self._options.staticRoutes.forEach(route => {
self.app.use(BASEPATH + route, express.static(path.join(__dirname, 'public')));
});

// register page renderer
router.get(BASEPATH, renderer.render());

// templates
self._options.routes.forEach(route => {
self.app.use(BASEPATH + route, router);
});
// router
self.app.use(BASEPATH, router);

// register error handlers
self.app.use(renderer.logErrors());
self.app.use(renderer.clientErrorHandler());
self.app.use(renderer.catchAll());

稍后我有一个 catch all 来检查用户登录:

       self.app.use(function (req, res, next) {
var redirect_uri = '/login';
if (req.user) {
return next();
} else {
return res.redirect(redirect_uri);
}
});

此路由会导致静态文件以及 public 文件夹下的 304 重定向。

一种选择是使用基于路径的中间件,如 here :

var unless = function (middleware, ...paths) {
return function (req, res, next) {
const pathCheck = paths.some(path => path === req.path);
pathCheck ? next() : middleware(req, res, next);
};
};//unless

像这样使用

app.use(unless(redirectPage, "/user/login", "/user/register"));

但是我的情况如何申请呢?假设公共(public)文件是 / 路径下的服务器(即 public 文件夹)及其子文件夹(如 cssjsimages 甚至 favicon.icorobots.txt 等文件)。

最佳答案

有多种方法可以use middlewares in express .

我宁愿在敏感路径上使用路由器级中间件,而不是从应用程序级登录检查中排除静态/公共(public)资源(在这里您可以读取请求并跳过对某些路径的检查)。

您可以像这样在当前的路由调用中定义路由器级中间件:

router.get('/path_of_the_route', middleware1, middleware2, ..., requestHandler);

通常我会这样做:

serverApp.use(express.static(__dirname + '/public'));

// loginController renders the login pages (and password-reset etc) and provides login/logout functionality
router.use('/', loginController);
router.use('/login', loginController);

// every request to the '/secured' path will be send through the authentication check middleware
router.use('/secured', loginController.checkLoginMiddleware, securedContentPageController);

关于javascript - 从 Express 路由器中排除公用文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58375400/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com