[英]Firestore triggers not running on emulator
在本地Firestore和函數模擬器上運行我的Firestore觸發器時,它們實際上不會觸發。 有時我會觸發它們,但是隨后我做了一些小改動,一切突然停止了。
我的仿真器在節點8上運行。與仿真器交互的代碼在節點12上運行。我可以知道該仿真器正在工作,因為當我多次運行測試代碼時,我可以看到文檔正在添加到集合中,但我的onCreate觸發器從未運行。
這是我的觸發器:
import * as functions from 'firebase-functions';
export const charactersOnCreate = functions.firestore.document('characters').onCreate(() => {
console.log('triggered');
})
這是我的測試代碼:
import * as dotenv from 'dotenv';
import * as admin from 'firebase-admin';
import * as path from 'path';
import { credential } from '../config';
dotenv.config({
path: path.join(__dirname, '../../.env.test')
});
console.log(process.env.FIRESTORE_EMULATOR_HOST);
const app = admin.initializeApp({ credential });
const db = app.firestore();
const runTest = async () => {
const charactersRef = db.collection('characters');
const allCharacters = await charactersRef.get()
allCharacters.forEach(character => {
console.log('\t', character.id);
});
const userDoc = await db.collection('users').doc();
console.log(userDoc.id);
await userDoc.set({
characters: []
});
const characterDoc = await db.collection('characters').doc();
console.log(characterDoc.id);
await characterDoc.set({
ownerRef: userDoc
});
const userData = (await userDoc.get()).data();
const characterData = (await characterDoc.get()).data();
console.log(characterData);
console.log(userData);
}
runTest().then(() => {
console.log('done');
}).catch((err) => {
console.error(err);
});
這是模擬器啟動的輸出:
i Starting emulators: ["functions","firestore"]
✔ functions: Using node@8 from host.
✔ functions: Emulator started at http://localhost:5001
i firestore: Logging to firestore-debug.log
✔ firestore: Emulator started at http://localhost:8080
i firestore: For testing set FIRESTORE_EMULATOR_HOST=localhost:8080
i functions: Watching "/Users/josh/Development/Projects/naturoll-api/functions" for Cloud Functions...
i functions: Setting up Cloud Firestore trigger "charactersOnCreate"
✔ functions: Trigger "charactersOnCreate" has been acknowledged by the Cloud Firestore emulator.
i functions: Setting up Cloud Firestore trigger "charactersOnUpdate"
✔ functions: Trigger "charactersOnUpdate" has been acknowledged by the Cloud Firestore emulator.
這是我的測試代碼的輸出:
localhost:8080
2DUPXO9J6yrzbOuoDPzw
nfE7y8VhsoF5vxvHzHqA
{ ownerRef:
DocumentReference {
_firestore:
Firestore {
_settings: [Object],
_settingsFrozen: true,
_serializer: [Object],
_projectId: 'naturoll-7b519',
_lastSuccessfulRequest: 1563044750473,
_preferTransactions: false,
_clientPool: [Object] },
_path: ResourcePath { segments: [Array] } } }
{ characters: [] }
done
這是我的Firestore日志:
API endpoint: http://localhost:8080
If you are using a library that supports the FIRESTORE_EMULATOR_HOST environment variable, run:
export FIRESTORE_EMULATOR_HOST=localhost:8080
Dev App Server is now running.
Jul 13, 2019 3:05:39 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
Jul 13, 2019 3:05:39 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected HTTP/2 connection.
Jul 13, 2019 3:05:40 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected non-HTTP/2 connection.
Jul 13, 2019 3:05:50 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
INFO: Detected HTTP/2 connection.
我不確定目前還需要做什么。 我不明白為什么觸發器不觸發。 當我再次運行測試代碼時,先前創建的字符ID也會被打印出來,因此Firestore顯然正在運行並接受數據。
事實證明,即使您不使用通配符,也必須存在通配符才能觸發觸發器。
改變中
export const charactersOnCreate = functions.firestore.document('characters').onCreate(() => {
至
export const charactersOnCreate = functions.firestore.document('characters/{characterId}').onCreate(() => {
解決問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.