繁体   English   中英

如何在Node.js中检查会话数据

[英]How to check session data in nodejs

在我的项目中使用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)

任何帮助表示赞赏..!

下面的代码是一个中间件:

使用中间件

中间件和app.use在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要存储或访问会话数据,只需使用请求属性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!')
  }
})

请尝试这个

app.use((req,res,next)=>{
  if(!req.session.data)
  {
      return res.redirect("/"); or res.redirect("/"); //Both not working
  } else {
    next();
  }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM