为什么 firestore onWrite 触发器不会在 firebase 云函数模拟器上被调用?

Why doesn't firestore onWrite trigger get invoked on firebase cloud functions emulator?

我有一个 firestore,其中包含一个名为 "chats" 的集合;我使用 firestore 模拟器插入一个新文档,我希望 onWrite 触发器在我 运行 index.js 本地在我的 firebase cloud functions emulator 上被调用(通过 运行 firebase emulators:start), 但它从来没有。

我知道模拟器已连接到正确的 firestore 模拟器,因为我可以读取数据(见下文),但我无法调用触发器。

// My setup:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

// We are able to fetch a document correctly, meaning at least my
// cloud functions emulator is hooked up to the firestore emulator!
admin.firestore().collection("chats").doc("eApXKLLXA4X6tIJtYpOx").get()
  .then(doc => {
      if (doc.exists) {
         console.log("Document data:", doc.data()); // <- this works!!
      } else {
         throw new Error("No sender document!");
      }
   })

// This never gets called when I insert a new document through the emulator UI!
exports.myFunction = functions.firestore
  .document('chats/{chat-id}')
  .onWrite((change, context) => { console.log("on write") });

尝试将文档选择器从 chats/{chat-id} 更改为 chats/{chatId}。看起来这里禁止使用 - 符号。如果我使用它,我会在 firebase-debug.log 中收到以下错误:

[debug] [2020-06-01T12:17:29.924Z] Jun 01, 2020 3:17:29 PM com.google.cloud.datastore.emulator.impl.util.WrappedStreamObserver onError INFO: operation failed: Invalid pattern. Reason: [69:-] Expected '}' at end of capture expression.

另一个原因可能是使用了错误的项目 ID,但您的情况似乎并非如此。 参见:Firestore triggers of cloud functions in emulator are ignored