【问题标题】:Firebase functions not logging "console.log()" statementsFirebase 函数不记录“console.log()”语句
【发布时间】:2019-04-05 23:05:03
【问题描述】:

我一直在努力解决下面的函数,但它的 console.log() 语句没有出现在 Firebase 日志中。如果我从db.collection 调用开始取出所有内容,顶部的console.log() 语句将显示,但是一旦我添加db.collection 调用,console.log() 语句中的 none 将显示在 Firebase 的日志中。

我对 JavaScript 不是很熟悉(我通常使用 Python 进行后端编程),所以这可能是 Promises 工作方式的问题。我现在正在研究这个。

知道发生了什么吗?

exports.purchaseItem = functions.https.onCall((data, context) => {
  console.log('data:')
  console.log(data)
  let lbcCustomerStripeToken = data.lbcCustomerStripeToken
  let lbcStoreId = data.lbcStoreId
  let amount = data.amount
  console.log('lbcCustomerStripeToken:')
  console.log(lbcCustomerStripeToken)
  console.log('lbcStoreId:')
  console.log(lbcStoreId)
  console.log('amount:')
  console.log(amount)

  let lbcFee = Math.round(amount * 0.02)

  db.collection('stores').doc(lbcStoreId).get().then(lbcStore => {
    if (!lbcStore.exists) {
      console.log('No such product!');
    } else {
      console.log('Document data:', product.data());
    }
    console.log('storeInfo:')
    console.log(lbcStore.data())
    return {message: 'Success'}
  })    
  .catch((error) => {
    console.log(error);
  });
};

【问题讨论】:

标签: javascript node.js firebase google-cloud-functions


【解决方案1】:

您也可以按照文档中的说明使用查看日志:

https://firebase.google.com/docs/functions/writing-and-viewing-logs#viewing_logs

使用 firebase 工具查看日志

firebase functions:log

查看特定功能的日志

firebase functions:log --only <FUNCTION_NAME>

【讨论】:

    【解决方案2】:

    您可以在 Firebase 控制台的特定函数的 Log 选项卡中查看通过 console.log() 打印的数据:

    https://console.firebase.google.com/u/0/project/&lt;project-name&gt;/functions/logs

    *将&lt;project-name&gt; 更改为您的(不包括&lt; &gt;)。

    *您可能需要选择特定的功能/日志级别才能实时查看日志。

    【讨论】:

    • 日志不工作且未显示在firebase平台的日志中
    • @KamelMili 你在屏幕上看到了什么?您尝试访问的 URL 是什么?
    • 也许你没有按右边的播放图标?它应该立即显示。
    • 不,我按下了播放按钮,但总是这样,而且我很生气的是 firestore 和 firebase 模拟器的 beta 版本。由于 java 存在错误,我无法安装,我确实有 java >_
    • PS 它在控制台工作,但你应该选择功能和信息作为类型来查看它
    【解决方案3】:

    你必须返回异步get()方法返回的promise,参见文档here,它指出“要在异步操作后返回数据,返回一个promise。promise返回的数据被发送回客户。”

    所以以下应该可以工作:

    exports.purchaseItem = functions.https.onCall((data, context) => {
      console.log('data:')
      console.log(data)
      let lbcCustomerStripeToken = data.lbcCustomerStripeToken
      let lbcStoreId = data.lbcStoreId
      let amount = data.amount
      console.log('lbcCustomerStripeToken:')
      console.log(lbcCustomerStripeToken)
      console.log('lbcStoreId:')
      console.log(lbcStoreId)
      console.log('amount:')
      console.log(amount)
    
      let lbcFee = Math.round(amount * 0.02)
    
      return db.collection('stores').doc(lbcStoreId).get().then(lbcStore => {
        if (!lbcStore.exists) {
          console.log('No such product!');
        } else {
          console.log('Document data:', product.data());
        }
        console.log('storeInfo:')
        console.log(lbcStore.data())
        return {message: 'Success'}
      })    
      .catch((error) => {
        // To be adapted here, see https://firebase.google.com/docs/functions/callable#handle_errors
        console.log(error);
      });
    };
    

    另外,请注意您应该针对错误处理部分调整代码,请参阅https://firebase.google.com/docs/functions/callable#handle_errors

    最后,确保您的db 常量是用admin.firestore(); 定义的。

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多