[英]Express - public directory divided for authorized/unauthorized users
我有一個用express.js編寫的應用程序,並且試圖將此應用程序分為2個部分:
Express還配置為從/unauth/public/
獲取靜態文件,並且我想添加第二個靜態文件夾以請求來自授權路由的請求- /auth/public
轉到/ app / *
我的路線配置如下所示:
var authRoutes = express.Router();
var unauthRoutes = express.Router();
authRoutes.get('/app/*', function(req, res, next) {
if(!req.isAuthenticated())
return res.redirect("/login/");
res.send("AUTHORIZED");
});
unauthRoutes.get('/', function(req, res, next) {
res.send("LANDING PAGE");
});
unauthRoutes.get('/login/', function(req, res, next) {
if(req.isAuthenticated())
return res.redirect("/app/");
res.send("LOGIN PAGE");
});
unauthRoutes.get('/registration/', function(req, res, next) {
if(req.isAuthenticated())
return res.redirect("/app/");
res.send("REGISTRATION PAGE");
});
unauthRoutes.get('/*', function(req, res, next) {
res.send("ERROR 404");
});
app.use('/', authRoutes);
app.use('/', unauthRoutes);
我試圖修改req.url並基於此調用另一個靜態oruter express.static('auth/public')
:
但是我不知道如何處理路由app.get('/auth/*', ...)
-之前的修改將替換url,並且永遠不會調用此路由。
您可以嘗試這樣的事情:
// Create your static middlewares
var unauthStatic = express.static('unauth/public');
var authStatic = express.static('auth/public');
// This goes in place of where you would normally load your static middleware
app.use(function(req, res, next) {
if (req.isAuthenticated()) {
authStatic(req, res, next);
} else {
unauthStatic(req, res, next);
}
});
編輯:
如果希望通過身份驗證的用戶能夠訪問auth和unauth目錄中的文件,則可以對app.use
進行兩次調用,如下所示:
app.use(unauthStatic);
app.use(function(req, res, next) {
if (! req.isAuthenticated()) {
return next();
}
authStatic(req, res, next);
});
請記住,express在堆棧中使用中間件,這意味着要滿足給定的請求,所有已注冊的中間件均按其use
d的順序use
。 一旦一些中間件調用req.send,就不會再執行其他中間件。 無論如何,嘗試這樣的事情:
function Authorization(req, res, next) {
if(!req.isAuthenticated())
return res.redirect("/login");
next();
}
var AnonRouter = express.Router()
// GET /style.css will request /unauth/public/style.css
.use(express.static('unauth/public'))
.get('/', function (req, res) { })
.get('/login', function (req, res) { });
var AuthRouter = express.Router()
.use(Authorization)
// GET /app/style.css will request /auth/public/style.css
.use(express.static('auth/public'))
.get('*', function (req, res, next) {
// Handle reqs for non-static files
});
app.use('/', AnonRouter);
app.use('/app', AuthRouter);
app.get('*', function (req, res) {
res.status(404).send('404!');
});
但是我不知道如何處理路由app.get('/ auth / *',...)-之前的修改將替換url,並且永遠不會調用此路由。
該語句使我認為,在調用express的靜態中間件后 ,您正在嘗試以某種方式處理請求。 這是不可能的:靜態中間件提供靜態文件,並且這樣做后您將無法執行其他邏輯,但是您可以在之前運行東西! 請注意,在我的代碼中,授權中間件將在發送靜態文件之前運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.