gpt4 book ai didi

node.js - NodeJs 中的中间件总是重定向到同一页面(我猜)

转载 作者:搜寻专家 更新时间:2023-10-31 23:47:24 25 4
gpt4 key购买 nike

我正在开发一个页面,以便使用 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,但是是一样的)。循序渐进

  1. 清除浏览器缓存并启动 Node
  2. localhost:3000/ --> 登录 NOT LOGGED IN
  3. 登录并自动重定向到 /dashboard --> 登录并重定向到 DASHBOARD|然后记录 -->LOAD DASHBOARD`
  4. 尝试进入/new-product --> 获取日志 LOAD DASHBOARD

最佳答案

尝试切换到 302 重定向...301 重定向通常被缓存。

关于node.js - NodeJs 中的中间件总是重定向到同一页面(我猜),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973407/

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