как получить данные после успешной аутентификации с помощью узла, выразить и отреагировать (ошибка componentDidMount) - PullRequest
0 голосов
/ 30 сентября 2019

Я работаю над проектом Node-express-реакции, в котором я вызываю API отчетов Google Analytics для отображения некоторых данных на стороне клиента. Прямо сейчас у меня есть:

  • мой сервер и мой интерфейс на двух отдельных локальных хостах
  • Кнопка входа в Google на интерфейсе, перенаправляющая на серверчтобы запустить процесс аутентификации OAuth 2.0
  • Я вызываю API отчетности ga, как только у меня есть токен.

Пока все работает хорошо. Теперь я хотел бы передать ответ от вызова API клиентской стороне (реагировать). У меня есть следующее component:

    componentDidMount() {
    // Pick whatever host/port your server is listening on
    fetch('http://localhost:5000/getData')
      .then(res => { // <-- The `results` response object from your backend
        // fetch handles errors a little unusually
        if (!res.ok) {
          throw res;
        }
        // Convert serialized response into json
        return res.json()
      }).then(data => {
        // setState triggers re-render
        this.setState({loading: false, data});
      }).catch(err => {
        // Handle any errors
        console.error(err);
        this.setState({loading: false, error: true});
      });
  }

Вот мой вызов API на стороне сервера

router.get('/getData', function(req, res) {
    var token = req.query.token;
request('https://www.googleapis.com/analytics/v3/management/accounts?access_token=' + token,  function (error, response, body) {
    if(error){
      console.log(error);
    }else{
      console.log(JSON.parse(body))
          let views = []
   JSON.parse(body).items.forEach(view => {
            views.push({
              name: view.webPropertyId + ' - ' + view.name + ' (' + view.websiteUrl + ')',
              id: view.id
            })
          })
      console.log(views)
      res.send(views);

    }
});

})

Проблема заключается в том, что componentDidMount() вызывается до того, как я нажимаюкнопка входа в Google, которая приводит к ошибке, потому что данные из API недоступны (так как аутентификация еще не была выполнена).

Какой логике я должен следовать, чтобы получать данные только после входа в системубыл успешным?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...