node.js - 如何在节点成功认证后获取数据,表达和反应(componentDidMount错误)
问题描述
我正在开发一个 Node-express-react 项目,我正在调用 Google Analytics 报告 API 以在客户端显示一些数据。现在我有:
- 我的后端和前端在两个不同的本地主机上
- 前端的 Google 登录按钮重定向到后端以运行 OAuth 2.0 身份验证过程
- 获得令牌后,我将调用 ga 报告 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 的数据不可用(因为尚未完成身份验证)。
只有在登录成功后,我应该遵循哪种逻辑来获取我的数据?
谢谢。
解决方案
推荐阅读
- javascript - React Materialize Parallax 图像不随背景滚动
- laravel - 为什么在运行“php artisan migrate --env=local”后创建“迁移”和“用户”表
- vba - 仅在第一次时在 MouseDown/MouseUp 上清空预填充的 TextBox
- javascript - Xampp 接受 Ajax 请求
- c# - c#异步运行多个process.Start()
- javascript - all: function() 是做什么的?
- r - 如何在 R 中将矩阵作为 data.frame 的元素放置?
- azure - Azure DevOps 将路径过滤器定义为 yml 构建文件
- arrays - 为什么 MATLAB 不隐藏二维尾随单例维度?
- jupyter-notebook - 如何将 Jupyter 添加到 IBM Watson Studio?