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

Firebase Functions TypeError:无法读取undefined的arrayUnion属性

解决TypeError: Cannot read properties of undefined (reading 'arrayUnion')问题

问题根源

你混合使用了CommonJS和ES模块两种导入方式,导致admin.firestore.FieldValue无法正确访问。代码里同时用了import admin = require("firebase-admin");和ES模块的import { initializeApp, getFirestore } from "firebase-admin/...",这种混用会破坏Firebase Admin SDK的模块化结构,使得admin.firestore对象未被正确初始化。

解决步骤

  1. 统一使用ES模块导入:直接从firebase-admin/firestore导入FieldValue,不再依赖admin对象的引用。
  2. 替换admin.firestore.FieldValue为导入的FieldValue:在更新文档时使用直接导入的FieldValue调用arrayUnion。

修改后的完整代码

// Firebase SDKs
import { logger } from "firebase-functions/v2";
import { onRequest } from "firebase-functions/v2/https";
import { initializeApp } from "firebase-admin/app";
import { getFirestore, FieldValue } from "firebase-admin/firestore";

initializeApp();

interface Item {
  itemCategory: number;
  itemIndex: number;
  itemTimestamp: number;
  itemCount: number;
  itemStatus: number;
}

exports.handleItemRequest = onRequest(async (req, res) => {
  try {
    const { sectorID, locationID, itemRequests, entityID } = req.body.data;

    // Process each user's item requests
    for (const userID of Object.keys(itemRequests)) {
      itemRequests[userID] = itemRequests[userID].filter((item: Item) => {
        // Remove item request if count is 0 or less
        if (item.itemCount <= 0) {
          return false;
        }

        // Set status to 0 if not already 0
        if (item.itemStatus !== 0) {
          item.itemStatus = 0;
        }

        return true;
      });
    }

    // Firestore document reference
    const docPath = `entities/${entityID}/sectors/${sectorID}/locations/${locationID}`;
    const docRef = getFirestore().doc(docPath);

    // Update the confirmedItems field
    await docRef.update({
      confirmedItems: FieldValue.arrayUnion(
        ...Object.values(itemRequests).flat(),
      ),
    });

    // Success response
    res.json({success: true});
  } catch (error) {
    if (error instanceof Error) {
      logger.error("Error handling item request: ", error);
      res.json({success: false, error: error.message});
    } else {
      logger.error("Unexpected error type");
      res.json({success: false});
    }
  }
});

额外注意事项

  • 确保你的package.json中type字段设置为"module"(如果用ES模块),或者保持纯CommonJS风格,不要混用两种导入方式。
  • 检查firebase-admin和firebase-functions的版本,确保使用支持模块化导入的最新稳定版(v9及以上)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:32:36