设置标题后设置会话

时间:2017-10-15 20:40:02

标签: node.js mongodb express

我试图实现一个异步方法,该方法对某个API进行POST调用并检索其数据,然后将结果存储在用户的会话中。任务本身似乎很容易,但是当我这样做时,它就会出现问题。样式。

我不希望等待结果从外部API返回,而是让用户加载他请求的页面并继续浏览。只有当响应准备就绪时,我才希望它保存在会话中。

一切似乎都运转正常,但唯一的问题是我设置会话并进入下一个路线的那一刻,一切都会丢失,好像我从未在第一页中设置它。调试代码还表明该过程完成没有任何错误,因此我怀疑在已设置响应头之后设置会话的问题。但是,似乎无法理解为什么这应该是一个问题。

我正在使用带有express的nodejs,以及用于session&的mongodb。数据库处理。

router.get('/myroute', function(req, res, next) { 
  request({
        url: endpoint,
        method: "POST",
        json: true,
        body: jsonData
    }, function(error, response, body) {
    req.session.mykey = 'some response';
  });
  res.redirect('/otherroute');
});

router.get('/checkresult', function(req, res, next) { 
  res.json(req.session.mykey);
});

1 个答案:

答案 0 :(得分:1)

我认为您需要明确调用save

function(error, response, body) {
    req.session.mykey = 'some response';
    req.session.save();
}

https://expressjs.com/en/resources/middleware/session.html#sessionsavecallback

  

如果会话数据已被更改,则会在HTTP响应结束时自动调用此方法

在您的情况下,这种自动保存将很快发生。