2016-11-21 42 views
0

因此,在這裏我有一個路由來調用一個API,並向它發送用戶令牌。 API然後生成一個新的令牌並將其發送迴應答。在節點中的req.user會話中設置更新的令牌

然後我想用新令牌更新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以上,那麼它就是未定義的,因爲它顯然超出了範圍。

任何想法如何解決這個問題?

感謝

回答

0

你發送一個響應之前,您可以設置在req.user.token值。

req.user.token = returnedToken; res.status(response.statusCode).send(body);

這樣相同的請求也可以在下一個中間件中使用。另外,如果你想從用戶中刪除舊的會話令牌,你可以刪除(req.user);有了這個,您可以從請求對象中刪除舊的令牌值。

+0

謝謝。這有效,有時它只是需要新鮮的眼睛! – Sam