我正在开发一个页面,以便使用 express 和 ejs 在 NodeJs 中学习。
在路由文件中,如果与 /
或 /login
匹配,则检查是否已登录。如果没有,则加载登录页面,否则加载管理页面。这个工作正常,我添加了另一个路由来重定向到其他一些页面。要检查是否已登录,我使用中间件 requireLoggedIn
,这是我的代码:
var path = require("path");
module.exports = function (app) {
app.get(/^\/$|^\/login$/,function(req,res){
if(req.session.loggedIn == undefined)
{
res.set('Access-Control-Allow-Origin', '*');
res.render('pages/login');
}
else
{
console.log("here")
res.writeHead(301, {
Location: '/admin'
});
res.end();
}
}).listen(3000);
function requireLoggedIn(req, res, next) {
if (!req.session || req.session.loggedIn === undefined) {
res.writeHead(301, { 'Location': '/login' });
res.end();
return;
}
next();
}
app.get('/admin', requireLoggedIn, function(req,res){
res.send('HERE WILL BE ADMIN PAGE');
});
app.get('/new-product', requireLoggedIn, function(req,res){
res.render('pages/new-product');
});
}
登录后,如果我想转到 /new-product
,它总是重定向到 /admin
。我认为这是我在第一条路线上的正则表达式的问题(因为这是唯一重定向到 /admin
的地方),但我添加了一个 console.log,并且在尝试加载时没有记录 /new-product
并加载 /admin
。
删除中间件页面加载正常,所以我猜问题就在那里,但我看不出是哪个问题
我做错了什么?
编辑
清除浏览器缓存后,我可以正确加载到任何页面,但在第一次加载任何页面后,所有其他页面都会重定向到该页面。
编辑
我添加了更多代码和更多调试,以检查:
var path = require("path");
module.exports = function (app) {
app.get(/^\/$|^\/login$/,function(req,res){
console.log(req.session.loggedIn);
if(req.session.loggedIn == undefined)
{
res.set('Access-Control-Allow-Origin', '*');
res.render('pages/login');
console.log("NOT LOGGED IN");
}
else
{
req.session.loggedIn = true;
console.log("REDIRECT TO DASHBOARD")
res.writeHead(301, {
Location: '/dashboard'
});
res.end();
}
}).listen(3000);
function requireLoggedIn(req, res, next) {
if (!req.session || req.session.loggedIn === undefined) {
res.writeHead(301, { 'Location': '/login' });
res.end();
return;
}
next();
}
app.get("/dashboard", requireLoggedIn, function(req,res){
console.log('LOAD DASHBOARD');
res.render('pages/dashboard');
});
app.get("/new-product", requireLoggedIn, function(req,res){
console.log('LOAD NEW PRODUCT');
res.render('pages/new-product');
});
}
(/admin
现在叫做 dashboard,但是是一样的)。
循序渐进
- 清除浏览器缓存并启动 Node
localhost:3000/
--> 登录NOT LOGGED IN
- 登录并自动重定向到
/dashboard
--> 登录并重定向到 DASHBOARD|然后记录 -->
LOAD DASHBOARD` 尝试进入/new-product
--> 获取日志LOAD DASHBOARD
最佳答案
尝试切换到 302 重定向...301 重定向通常被缓存。
关于node.js - NodeJs 中的中间件总是重定向到同一页面(我猜),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973407/