在我的项目中使用express-session可以正常工作,如果用户登录到我的站点意味着我在会话中存储了他们的数据,并且在注销销毁会话之后也可以正常工作,在注销后如果用户运行特定的url意味着可以将用户带到该页面而无需登录,需要限制该页面,以下是我尝试过的代码
app.use((req,res,next)=>{
if(!req.session.data)
{
return res.redirect("/"); or res.redirect("/"); //Both not working
}
next();
})
这显示以下错误
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.header (/home/djaxtech/Documents/luka-asset/node-app/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/home/djaxtech/Documents/luka-asset/node-app/node_modules/express/lib/response.js:170:12)
at done (/home/djaxtech/Documents/luka-asset/node-app/node_modules/express/lib/response.js:1004:10)
at tryHandleCache (/home/djaxtech/Documents/luka-asset/node-app/node_modules/ejs/lib/ejs.js:257:5)
Anyhelp表示赞赏。.
答案 0 :(得分:0)
下面的代码是一个中间件:
What does middleware and app.use actually mean in Expressjs?
这意味着当调用next()
时,将在该行中执行另一个函数。而且您也必须从那里发出响应。
在下面,该错误表示该响应已经发送,您正在尝试再次发送,这是不可能的。
Error: Can't set headers after they are sent.
app.use((req, res, next) => {
if (!req.session.data) {
// return res.redirect("/"); or res.redirect("/"); //use only one.
}
next();
})
要求会议 要存储或访问会话数据,只需使用请求属性req.session,该属性通常由商店序列化为JSON,因此嵌套对象通常很好。例如,下面是一个特定于用户的视图计数器:
// Use the session middleware
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))
// Access the session as req.session
app.get('/', function(req, res, next) {
if (req.session.views) {
req.session.views++
res.setHeader('Content-Type', 'text/html')
res.write('<p>views: ' + req.session.views + '</p>')
res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>')
res.end()
} else {
req.session.views = 1
res.end('welcome to the session demo. refresh!')
}
})
答案 1 :(得分:0)
请尝试这个
app.use((req,res,next)=>{
if(!req.session.data)
{
return res.redirect("/"); or res.redirect("/"); //Both not working
} else {
next();
}
})