如果在Express中不满足条件,如何重定向除两条以外的所有路径
在我的express服务器上,我尝试实现以下逻辑:如果在Express中不满足条件,如何重定向除两条以外的所有路径,express,nodejs-server,Express,Nodejs Server,在我的express服务器上,我尝试实现以下逻辑: 如果路径不是/Login或/Register 并且request.session.authenticated不正确 将所有请求重定向到/Login 换句话说,伪代码: function() { if (req.session.authenticated !== true && path !== '/Login') res.redirect('/Login') }
function()
{
if (req.session.authenticated !== true && path !== '/Login')
res.redirect('/Login')
}
如何使用app.get()或类似工具在Express中编写此函数
app.get( path , (req, res) =>
{
// ??
})
-------------------------------------------编辑后--------------------------
所以,我试过这个:
app.use(redirect())
function redirect(req, res, next)
{
if (req.session.authenticated !== true && req.path !== '/Login/Login.html' || req.session.authenticated !== true && req.path !== '/Register/Register.html')
{
res.redirect('/Login/Login.html');
return next()
}
}
但是,我得到了以下错误:
if (req.session.authenticated !== true && req.path !== '/Login/Login.html' || req.session.authenticated !== true && req.path !== '/Register/Register.html')
^
TypeError: Cannot read property 'session' of undefined
我猜出于某种原因,这个函数没有访问请求对象的权限,这很奇怪。我怎样才能让它通过请求?我认为所有中间件功能都可以访问该请求
------------------------------------第二版------------------------------------
在我的例子中,上面的中间件函数只有在将其保存到变量中,然后使用app.use()调用保存函数的变量时才起作用
这就是:
app.use(redirectMe)
let redirectMe = function redirect(req, res, next)
{
if (req.session.authenticated !== true && req.path !== '/Login/Login.html' || req.session.authenticated !== true && req.path !== '/Register/Register.html')
{
res.redirect('/Login/Login.html');
return next()
}
}
您可以为此编写类似于身份验证中间件的东西
function redirect(req, res, next) {
if (req.session.authenticated !== true && req.path !== '/Login' && req.path !== '/Register') {
res.redirect('/Login');
return
}
}
您只需要导出该函数,就可以在路由中将其用作中间件。大概是这样的:
app.get('/profile', redirect(), (req, res) => {
//Some code here
});
如果我执行类似app.use(redirect())的操作,服务器会为传入的每个HTTP请求运行该函数吗?是的,它会这样工作,我认为它应该没有()但是您可以尝试两种方法。如果这个用法有问题,而不是返回,你可以编写next(),看看我的编辑,出于某种原因,我没有访问请求的权限。你是否尝试过这样使用它:app.use(redirect)是的,但它不起作用,因为如果我这样做,它不会调用函数。