簡體   English   中英

Firestore觸發器未在模擬器上運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM