为什么 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
我有一个 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