【发布时间】:2020-02-10 23:55:48
【问题描述】:
我想从 express 路由器中排除 public 文件夹和所有静态文件和子文件夹。
目前我已经按照several SF 答案中的建议定义了 1) 公用文件夹,2) 路由器:
// 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());
稍后我会捕获所有检查用户登录的信息:
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 文件夹)及其子文件夹(如css、js、images 甚至是favicon.ico、robots.txt 等文件.).
【问题讨论】:
-
抱歉,您的问题不是很清楚。你想达到什么目的?也许一些上下文会更有帮助。
-
@Shumail 谢谢。我想避免在
public文件夹下的静态文件上路由最后一个app.use。 -
你能分享你的代码你是如何尝试使用静态文件的?
-
@kisor 代码是:
self.app.use(express.static(path.join(__dirname, 'public'))); -
self._options.staticRoutes.forEach(route => { self.app.use(BASEPATH + route, express.static(path.join(__dirname, 'public'))); });这是干什么用的
标签: javascript node.js express