У меня есть небольшой узел, приложение для быстрой реакции. На стороне сервера работает порт 5000, а на стороне клиента - порт 3000. Когда страница индекса на стороне клиента http://localhost:3000/
запускается или обновляется, на стороне сервера возникает ошибка.
На стороне клиента у меня есть следующий компонент, который извлекает данные из серверной части:
class App extends Component {
state = {
data: null,
loading: true,
error: false
};
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});
});
}
на стороне сервера, у меня есть следующий маршрут:
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{
let views = []
JSON.parse(body).items.forEach(view => {
views.push({
name: view.webPropertyId + ' - ' + view.name + ' (' + view.websiteUrl + ')'
})
})
console.log(views)
res.send(views);
}
});
})
Вот ошибка, которую у меня есть TypeError: Cannot read property 'forEach' of undefined
по поводу этой строки кода JSON.parse(body).items.forEach(view => {
Насколько я понимаю, компонент componentDidMount()
выбирает серверную часть, прежде чем я смогуправильно подтвердить подлинность. Нет аутентификации, нет токена, запрос на стороне сервера к ответу Google Analytics пуст и forEach
не определен.
Что я должен сделать, чтобы избежать этой ошибки?