我试图实现一个异步方法,该方法对某个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);
});
答案 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响应结束时自动调用此方法
在您的情况下,这种自动保存将很快发生。