简体   繁体   中英

How to get Google cloud function execution event in node.js using firestore

Below is google cloud function , deployed properly and is working fine path to function - functions/index.js

const functions = require('firebase-functions');
const admin = require("firebase-admin");
admin.initializeApp();

exports.createUser = functions.firestore
.document('users/{userId}')
.onCreate((snap, context) => {
    const newValue = snap.data();
    console.log(newValue);
});

how can i access this function's event on successful invocation in node.js app something like

const myFunctions = require("./functions/index");

myFunctions.createUser().then((data) => {
    console.log(data)
})
.catch((err) => {
    console.log(err);
})

As of now getting below error在此处输入图片说明

Your createUser Cloud Function is triggered by a Firestore onCreate() event type and therefore will be "triggered when a document is written for the first time", as per the documentation .

The doc also adds the following:

In a typical lifecycle, a Cloud Firestore function does the following:

  1. Waits for changes to a particular document. (In this case when the document is written for the first time)

  2. Triggers when an event occurs and performs its tasks

  3. Receives a data object that contains a snapshot of the data stored in the specified document.

Therefore, if you want to trigger this Cloud Function from "the outside world", eg from a node.js app, you need to create a new Firestore document at the corresponding location, ie under the users collection. To this end you would use the Node.js Server SDK, see https://cloud.google.com/nodejs/docs/reference/firestore/0.14.x/

Note that you could also trigger it from a client application (web, android, iOS) by creating a new user doc with the corresponding client SDK.


Update following your comments:

You cannot directly "port" and run your code written for Cloud Functions to a Node.js app. You will have to re-develop your solution for Node.js.

In your case you should use the Node.js Server SDK (as mentionned in my comment) and you could use the onSnapshot method of a CollectionReference. See https://cloud.google.com/nodejs/docs/reference/firestore/0.14.x/CollectionReference#onSnapshot

I will try to answer your question, but it's a bit unclear. You asked:

How to get Google cloud function execution event

Well, the event has started when the funcion triggers and your code is running, ie your line const newValue = snap.data()

Maybe you are looking for a way to do certain tasks, when the trigger has run? You simply just do that from inside the function, and return a promise. If you for example had multiple async tasks to run, you could use a Promise.all([]).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM