首页 > 解决方案 > 如何在节点成功认证后获取数据,表达和反应(componentDidMount错误)

问题描述

我正在开发一个 Node-express-react 项目,我正在调用 Google Analytics 报告 API 以在客户端显示一些数据。现在我有:

到目前为止,一切都运行良好。现在我想将 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 的数据不可用(因为尚未完成身份验证)。

只有在登录成功后,我应该遵循哪种逻辑来获取我的数据?

谢谢。

标签: node.jsreactjsexpressauthentication

解决方案


推荐阅读