在函数调用中不保存会话
Sessions not saving inside function call
在我的AuthController中,我做了以下操作:
request.post({url: 'https://graph.api.smartthings.com/oauth/token', form: authData} , function(err, resp, body){
info = JSON.parse(body);
req.session.accessToken = info.access_token;
getEndpoint(req.session.accessToken, function(err, resp) {
if(err) {
//TODO: Handle error
console.log(err);
} else {
req.session.endpointUri = resp;
}
});
console.log("endpoint " + req.session.endpointUri);
res.view('test', {
accessToken: req.session.accessToken,
});
});
正如你所看到的,我正在尝试设置2个会话,accessToken和endpointUri。
accessToken
会话保存得很好,我可以从其他控制器访问它,但是我的endpointUri
不保存。
我已经测试了函数和resp正在返回,如果我在else语句中设置它后直接注销会话,它就会起作用。
如果我尝试在else语句之外注销会话,它是未定义的。
这是怎么回事?
你想要访问一个Async操作的会话值,这个操作在你返回你的视图时还没有完成。试一试:
request.post({url: 'https://graph.api.smartthings.com/oauth/token', form: authData} , function(err, resp, body){
info = JSON.parse(body);
req.session.accessToken = info.access_token;
getEndpoint(req.session.accessToken, function(err, resp) {
if(err) {
//TODO: Handle error
console.log(err);
} else {
req.session.endpointUri = resp;
console.log("endpoint " + req.session.endpointUri);
res.view('test', {
accessToken: req.session.accessToken,
});
}
});
});
顺便说一下,使用嵌套回调不是一个好的模式,请尝试使用bluebird库或asyncawait。
相关文章:
- Javascript 会话存储变量未正确保存
- 在几个浏览会话中保存javascript变量
- 需要将一个值从javascript变量保存到php会话
- 在浏览器会话中保存表单数据
- 王牌编辑器 - 通过开机自检在服务器上保存/发送会话
- 会话存储未保存或未加载
- 仅在某些请求上保存用户会话
- 使用 $.ajax({});时未保存快速会话;
- PHP 会话不通过多个页面保存变量
- 在脸书登录时保存会话
- “保存”OpenLayers会话,以便可以恢复它
- 余烬简单身份验证在会话中保存用户配置文件
- 角度将变量保存到带有 ajax 调用的 laravel 会话不起作用
- 在标头之前保存会话存储的最佳方法
- 我不知道如何使用session-express来保存会话
- 套接字.io 1.0.5:如何保存会话变量
- Angular js保存会话数据
- Sencha touch:保存登录名/密码(保存会话,多任务)
- 在函数调用中不保存会话
- Node.js和passport-facebook不保存会话