You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Firestore的Firebase推荐注册奖励云函数部署问题

修复Firebase Cloud Function的语法与逻辑问题

你的代码里存在几处语法错误,还有Firebase Functions API使用上的问题,我帮你一步步排查和修正:

主要问题分析

  • 过时的API调用:旧版的event.data已经被废弃,当前Firestore触发器的onCreate方法会传入snapshot和context参数,需要通过snapshot.data()获取文档数据。
  • 错误的文档引用操作:documentRef.data.ref是完全错误的写法,文档引用本身就可以直接调用更新方法;而且你直接写credits +5,但credits变量未定义,必须先读取推荐人当前的积分值。
  • 语法不完整:set方法的括号没有闭合,catch的箭头函数语法也写错了,缺少必要的符号和逻辑。

修正后的完整代码

// 确保初始化Firebase Admin
const admin = require('firebase-admin');
admin.initializeApp();

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

exports.createUser = functions.firestore
  .document('users/{userId}')
  .onCreate(async (snapshot, context) => {
    // 获取新注册用户的推荐人ID
    const newUser = snapshot.data();
    const referredBy = newUser.referredBy;

    // 没有推荐人时直接返回,避免无效操作
    if (!referredBy) {
      console.log('No referrer ID found, exiting function');
      return null;
    }

    // 构建推荐人账户信息的文档引用
    const referrerAccountRef = admin.firestore()
      .doc(`users/${referredBy}/cats/accountInformation`);

    try {
      // 先读取推荐人当前的积分数据
      const referrerAccountSnap = await referrerAccountRef.get();
      if (!referrerAccountSnap.exists) {
        console.log('Referrer account document does not exist');
        return null;
      }

      // 处理积分未初始化的情况,默认设为0
      const currentCredits = referrerAccountSnap.data().credits || 0;
      // 更新积分,使用update避免覆盖整个文档
      await referrerAccountRef.update({
        credits: currentCredits + 5
      });

      console.log(`Successfully added 5 credits to referrer ${referredBy}`);
      return null;
    } catch (error) {
      console.error('Error giving credits:', error);
      return null;
    }
  });

关键修正说明

  • API适配:改用新版触发器参数,并用async/await处理异步操作,比回调写法更清晰易维护。
  • 容错处理:添加了推荐人ID、推荐人文档是否存在的检查,避免空值引发的错误。
  • 正确的字段更新:使用update而非set,确保只修改积分字段,不会覆盖推荐人账户的其他数据;同时先读取当前积分再累加,避免直接覆盖原有值。
  • 语法补全:修复了所有缺失的括号、箭头函数的错误写法,完善了错误捕获逻辑。

内容的提问来源于stack exchange,提问作者overhound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:29:32