Я работаю над проектом 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 недоступны (так как аутентификация еще не была выполнена).
Какой логике я должен следовать, чтобы получать данные только после входа в системубыл успешным?
Спасибо.