首页 > 解决方案 > 如何使用 Javascript 从 Cloud Function 更新实时数据库?

问题描述

我正在为我的 iOS 应用程序创建一个云功能 - 我希望它在用户注册时创建一个 Stripe 客户(这可以正常工作),但我无法在该功能内将任何数据设置到我的实时数据库中。

这是我最近的尝试

const functions = require('firebase-functions')
const admin = require('firebase-admin')

admin.initializeApp(functions.config().firebase);
const stripe = require('stripe')(functions.config().stripe.testkey)



//when user is created: 
//1.create user with Stripe
//2.update users/user.uid/registeredStripe: "no" value to "yes"

exports.createStripeCustomer = functions.auth.user().onCreate((user) => {

  return stripe.customers.create({

    email: user.email

  }).then((customer) => {
    return admin.database().collection('users').doc(user.uid).set({registeredStripe: "yes"});
  });
});


Stripe 客户创建成功~但我的实时数据库根本没有更新。我试过用很多不同的方式重写这条线,但没有任何效果。

编辑:我正在尝试更新我的实时数据库,但没有进行更新(尝试将值从“否”更改为“是”。我在日志中没有收到任何错误,但没有进行更新。

标签: javascriptfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


我建议仔细检查 Firebase 控制台中的函数日志中是否确实存在错误。 我根本不希望这段代码起作用:

return admin.database().collection('users').doc(user.uid).set({registeredStripe: "yes"});

admin.database()适用于实时数据库,但“收集”和“文档”是 Firestore 方法。此代码应生成一个错误,指出“集合”不是一种方法。 Firestore 和实时数据库是完全不同的数据库,具有不同的 API。

如果你想更新实时数据库,你应该使用它自己的 API。您将使用诸如“child”之类的方法来指示要更改的数据库中的位置。请参阅文档


推荐阅读