javascript - session 不保存在函数调用内

标签 javascript node.js sails.js

在我的 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 个 session :accessToken 和 endpointUri。

accessToken session 保存得很好,我可以从其他 Controller 访问它,但是我的 endpointUri 没有保存。
我已经测试了该函数并且正在返回 resp,如果我在 else 语句中设置它后直接注销 session ,它就可以工作。

如果我尝试在 else 语句之外注销 session ,则它是未定义的。

这里发生了什么?

最佳答案

您想要访问异步操作的 session 值,该操作在您返回 View 时尚未完成。尝试:

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 - session 不保存在函数调用内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085721/

相关文章:

javascript - JS(ES6): Merge arrays based on id and concatenating sub arrays

node.js - 在 nodejs 项目中使用 es6 类的正确方法

node.js - 升级gradle到6.0需要ivy.xml和pom文件

node.js - 模块.js :538 throw err; using angular 4

json - 在 Node.js 中从 URL 检索 JSON 的最佳方法是什么

javascript - NodeJS/SailsJS 中 next() 的具体作用是什么?

javascript - jQuery会选择隐藏元素吗

javascript - 在javascript中将时间格式更改为24小时

javascript - 非常非常简单的javascript问题

sails.js - 在 Treeline 中,如何检查当前用户是否已登录?