我正在开发一个页面,以便使用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
现在称为仪表板,但是相同)。
一步一步
localhost:3000/
- >记录NOT LOGGED IN
/dashboard
- >记录REDIRECT TO DASHBOARD | Then get logged -->
LOAD DASHBOARD` Try to enter in /new-product
- >记录LOAD DASHBOARD
答案 0 :(得分:2)
尝试切换到302重定向... 301重定向通常被缓存。
答案 1 :(得分:1)
尝试向中间件添加额外参数 - 通常称为next。
基本上:
if(req.session.loggedIn == undefined)
{
res.set('Access-Control-Allow-Origin', '*');
res.render('pages/login');
console.log("NOT LOGGED IN");
}
else
{
next();
}
然后:
shipment.requestXmlInformation { () -> () in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.updateUi()
print(self.statusLbl.text)
})
}