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

Node.js 如何检查nodejs中的会话数据,node.js,express-session,Node.js,Express Session,我在我的项目中使用快速会话它工作正常,如果用户登录到我的站点意味着我在会话中存储了他们的数据,注销后销毁了会话,这也工作正常,注销后如果用户运行特定的url意味着将用户带到该页面而不登录,需要限制该页面,下面是我的代码 app.use((req,res,next)=>{ if(!req.session.data) { return res.redirect("/"); or res.redirect("/"); //Both not working } ne

我在我的项目中使用快速会话它工作正常,如果用户登录到我的站点意味着我在会话中存储了他们的数据,注销后销毁了会话,这也工作正常,注销后如果用户运行特定的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)

谢谢你的帮助

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

这意味着在调用
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!')
  }
})
//使用会话中间件
使用(会话({secret:'keyboard cat',cookie:{maxAge:60000}))
//以req.session的形式访问会话
app.get('/',函数(req,res,next){
if(请求会话视图){
请求会话视图++
res.setHeader('Content-Type','text/html')
res.write(“视图:”+req.session.views+“

”) res.write(“在以下时间过期:”+(req.session.cookie.maxAge/1000)+“s

”) 决议结束() }否则{ req.session.views=1 res.end('欢迎使用会话demo.refresh!') } })
请试试这个


在本部分之前的某个地方,您已经将某物发送到标题,如“发送后无法设置标题”所述。因此,在调用此部分之前,如果不知道脚本是什么样子,很难判断。我只使用简单的脚本,如果用户在浏览器中运行每个url,我需要检查是否有其他用户在会话中?所以我正在使用app.use中间件,若用户不在会话中意味着我将把用户重定向到索引页面,那个么代码是app.get(“/”,(req,res)=>{res.render(“index”);
app.use((req,res,next)=>{
  if(!req.session.data)
  {
      return res.redirect("/"); or res.redirect("/"); //Both not working
  } else {
    next();
  }
})