2016-06-28 4 views
0

Внутри моей 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 сеансов, и маркер доступа endpointUri.

Сессия accessToken сохраняет все в порядке, и я могу получить к ней доступ от других контроллеров, однако мой endpointUri не сохраняет.
Я тестировал функцию, и resp возвращается, и если я выхожу из сеанса прямо после установки его в инструкции else, это работает.

Если я попытаюсь выйти из сеанса вне инструкции else, он не определен.

Что здесь происходит?

+1

Конечная точка устанавливается на функцию async, которая не завершена, когда вы возвращаете представление. –

ответ

2

Вы хотите получить доступ к значению сеанса в операции 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.

+0

Спасибо, это имеет смысл. Как мне пойти на реализацию того, что я сделал, используя асинхронную библиотеку? – K20GH

Смежные вопросы