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

Firestore触发Cloud Function(Gen2)报TypeError错误的解决求助

Firestore Gen2触发器TypeError问题解决

问题场景

部署Gen2版本Cloud Function,期望Firestore的messages集合新增文档时触发函数,向文档添加硬编码的test字段。函数能被触发,但始终抛出TypeError: Cannot read properties of undefined (reading 'value')错误,自定义代码和官方makeuppercase示例代码均出现此问题。

错误信息

TypeError: Cannot read properties of undefined (reading 'value')
    at func (/workspace/node_modules/firebase-functions/lib/v2/providers/firestore.js:297:115)
    at /layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/function_wrappers.js:113:25
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

用户代码

const {logger} = require("firebase-functions");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");
const {initializeApp} = require("firebase-admin/app");
const { getFirestore } = require("firebase-admin/firestore");

initializeApp();

const functionsRegion = "europe-west1";

exports.testtrigger = onDocumentCreated({region: functionsRegion}, "/messages/{documentId}", (event) => {
  logger.log("Inside test_trigger function");

  const test = "Function was triggered on new document creation.";
  const documentRef = getFirestore().doc(event.data.value.name); 
  return documentRef.set({ test }, { merge: true }); 
});

用户还尝试过:

return event.data.ref.set({test}, {merge: true});

官方示例代码

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

解决方案

问题根源是Firebase Cloud Function Gen2与Gen1的Firestore触发器事件结构不同:

  • Gen1中event.data直接是DocumentSnapshot实例,可直接调用.ref、.data()等方法
  • Gen2中event.data是一个封装对象,实际的DocumentSnapshot需要通过event.data.doc获取

修正后的用户代码

const {logger} = require("firebase-functions");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");
const {initializeApp} = require("firebase-admin/app");

initializeApp();

const functionsRegion = "europe-west1";

exports.testtrigger = onDocumentCreated({region: functionsRegion}, "/messages/{documentId}", (event) => {
  logger.log("Inside test_trigger function");

  const test = "Function was triggered on new document creation.";
  // 通过event.data.doc.ref获取文档引用
  return event.data.doc.ref.set({ test }, { merge: true }); 
});

修正后的官方示例代码

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // 从event.data.doc中获取文档数据
  const original = event.data.doc.data().original;

  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // 用event.data.doc.ref更新文档
  return event.data.doc.ref.set({uppercase}, {merge: true});
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:02:07