因此,这里我有一个调用API的路由,将用户令牌发送给它。然后,API生成一个新的令牌,并在响应中将其发回。
然后,我想用新的令牌更新req.user.token
,这样我就可以继续在会话中进行有效的API调用。但是,我只能对响应范围之外的会话执行此操作。
这是我的尝试。如何让req.user.token
获取更新后的令牌?
router.post('/:id', function (req, res, next) {
var returnedToken = "";
var options = {
url: configUrl + '/' + req.params.id,
method: 'POST',
headers: {
'token': req.session.passport.user.token,
'caller': 'client[route:POST user]',
'x-request-id': req.requestId,
},
json: req.body
};
request(options, function (error, response, body) {
if (error) {
req.logger.error({err: error}, 'connection to user service has failed');
res.status(500).send(error.message);
} else {
res.status(response.statusCode).send(body);
returnedToken = response.body.token;
}
return next();
})
req.user.token = returnedToken;
});
如果我在请求中设置了req.user.token
,那么它在客户端的其他地方是不可用的。但是,如果我在上面设置req.user.token
,returnedToken
是未定义的,因为它显然在作用域之外。
有什么办法可以解决这个问题吗?
谢谢
发布于 2016-11-21 20:00:06
您可以在发送响应之前在req.user.token中设置该值。
req.user.token = returnedToken;res.status(response.statusCode).send(body);
因此,同样的请求也将在下一个中间件中可用。另外,如果您想从用户中删除旧的会话令牌,可以执行delete(req.user);使用此命令,您可以从request对象中删除旧的令牌值。
https://stackoverflow.com/questions/40718990
复制相似问题