Cod*_*001 7 firebase google-cloud-functions google-cloud-firestore firebase-cli
当在本地 Firestore 和函数模拟器上运行我的 Firestore 触发器时,它们实际上不会触发。有时我让它们触发,但随后我做了一些小改变,一切都突然停止工作。
\n\n我的模拟器在节点 8 上运行。与模拟器交互的代码在节点 12 上运行。我可以看出模拟器正在工作,因为当我多次运行测试代码时,我可以看到文档正在添加到集合中,但我的 onCreate 触发器从未运行。
\n\n这是我的触发器:
\n\nimport * as functions from \'firebase-functions\';\n\nexport const charactersOnCreate = functions.firestore.document(\'characters\').onCreate(() => {\n console.log(\'triggered\');\n})\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的测试代码:
\n\nimport * as dotenv from \'dotenv\';\nimport * as admin from \'firebase-admin\';\nimport * as path from \'path\';\nimport { credential } from \'../config\';\n\ndotenv.config({\n path: path.join(__dirname, \'../../.env.test\')\n});\n\nconsole.log(process.env.FIRESTORE_EMULATOR_HOST);\n\nconst app = admin.initializeApp({ credential });\n\nconst db = app.firestore();\n\nconst runTest = async () => {\n const charactersRef = db.collection(\'characters\');\n const allCharacters = await charactersRef.get()\n allCharacters.forEach(character => {\n console.log(\'\\t\', character.id);\n });\n const userDoc = await db.collection(\'users\').doc();\n console.log(userDoc.id);\n await userDoc.set({\n characters: []\n });\n const characterDoc = await db.collection(\'characters\').doc();\n console.log(characterDoc.id);\n await characterDoc.set({\n ownerRef: userDoc\n });\n const userData = (await userDoc.get()).data();\n const characterData = (await characterDoc.get()).data();\n console.log(characterData);\n console.log(userData);\n}\n\nrunTest().then(() => {\n console.log(\'done\');\n}).catch((err) => {\n console.error(err);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n这是模拟器启动的输出:
\n\ni Starting emulators: ["functions","firestore"]\n\xe2\x9c\x94 functions: Using node@8 from host.\n\xe2\x9c\x94 functions: Emulator started at http://localhost:5001\ni firestore: Logging to firestore-debug.log\n\xe2\x9c\x94 firestore: Emulator started at http://localhost:8080\ni firestore: For testing set FIRESTORE_EMULATOR_HOST=localhost:8080\ni functions: Watching "/Users/josh/Development/Projects/naturoll-api/functions" for Cloud Functions...\ni functions: Setting up Cloud Firestore trigger "charactersOnCreate"\n\xe2\x9c\x94 functions: Trigger "charactersOnCreate" has been acknowledged by the Cloud Firestore emulator.\ni functions: Setting up Cloud Firestore trigger "charactersOnUpdate"\n\xe2\x9c\x94 functions: Trigger "charactersOnUpdate" has been acknowledged by the Cloud Firestore emulator.\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的测试代码的输出:
\n\nlocalhost:8080\n2DUPXO9J6yrzbOuoDPzw\nnfE7y8VhsoF5vxvHzHqA\n{ ownerRef: \n DocumentReference {\n _firestore: \n Firestore {\n _settings: [Object],\n _settingsFrozen: true,\n _serializer: [Object],\n _projectId: \'naturoll-7b519\',\n _lastSuccessfulRequest: 1563044750473,\n _preferTransactions: false,\n _clientPool: [Object] },\n _path: ResourcePath { segments: [Array] } } }\n{ characters: [] }\ndone\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的 Firestore 日志:
\n\nAPI endpoint: http://localhost:8080\nIf you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:\n\n export FIRESTORE_EMULATOR_HOST=localhost:8080\n\nDev App Server is now running.\n\nJul 13, 2019 3:05:39 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead\nINFO: Detected non-HTTP/2 connection.\nJul 13, 2019 3:05:39 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead\nINFO: Detected HTTP/2 connection.\nJul 13, 2019 3:05:40 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead\nINFO: Detected non-HTTP/2 connection.\nJul 13, 2019 3:05:50 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead\nINFO: Detected HTTP/2 connection.\n\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道此时还能做什么。我不明白为什么触发器没有触发。当我再次运行测试代码时,之前创建的角色 ID 也会打印出来,因此 firestore 显然正在运行并接受数据。
\n事实证明,即使您不使用通配符,也需要存在通配符才能触发触发器。
改变
export const charactersOnCreate = functions.firestore.document('characters').onCreate(() => {
Run Code Online (Sandbox Code Playgroud)
到
export const charactersOnCreate = functions.firestore.document('characters/{characterId}').onCreate(() => {
Run Code Online (Sandbox Code Playgroud)
解决了问题
| 归档时间: |
|
| 查看次数: |
3798 次 |
| 最近记录: |