首页 > 解决方案 > 如何正确地将 Google Analytics API 结果从服务器发送到客户端?

问题描述

我正在尝试从 Google Analytics API 获取一些数据,到目前为止,我的功能运行良好,除了我无法将结果发送回客户端 ['res.send()']

const { google } = require('googleapis')
const functions = require('firebase-functions');

const scopes = 'https://www.googleapis.com/auth/analytics.readonly'
const key = require('./auth.json')
const jwt = new google.auth.JWT(key.client_email, null, key.private_key, 
scopes)
const view_id = '######'

exports = module.exports = functions.https.onCall((req, res) => {

  jwt.authorize(req, res, (err, result) => {
    google.analytics('v3').data.ga.get(
      {
        auth: jwt,
        ids: 'ga:' + view_id,
        'start-date': '30daysAgo',
        'end-date': 'today',
        metrics: 'ga:pageviews'
      },
      (err, result) => {
        console.log(result)
        res.send(result)
      }
    )
  })

})

现在正确的结果已记录在服务器端,但我无法将其发送回客户端。预期会是“res.send()”将数据返回给客户端以在 UI 中使用。

标签: node.jsfirebasegoogle-cloud-functions

解决方案


您正在混淆HTTP 触发器可调用触发器

您定义的是使用 的可调用触发器functions.https.onCall,但您错误地假设它接收请求和结果参数。callables 的文档说你得到一个数据和一个上下文对象。您还应该返回一个用您要发送的数据解析的承诺。

看起来您打算使用functions.https.onRequest. 它接收一个请求和响应对象,然后您使用响应对象将数据发送回客户端。


推荐阅读