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

时间:2018-08-03 10:06:18

标签: node.js express-session

在我的项目中使用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表示赞赏。.

2 个答案:

答案 0 :(得分:0)

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

Using middleware

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();
  }
})