【问题标题】:How to get Google cloud function execution event in node.js using firestore如何使用firestore在node.js中获取谷歌云函数执行事件
【发布时间】:2018-11-21 10:46:07
【问题描述】:

以下是谷歌云功能,部署正确,工作正常 函数路径 - 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);
});

如何在 node.js 应用程序中成功调用此函数的事件 像

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

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

截至目前已低于错误

【问题讨论】:

  • 我想在我的节点应用程序中收听这些事件,但 createUser() 是从移动应用程序调用的,那么解决方法应该是什么?

标签: node.js firebase firebase-realtime-database google-cloud-firestore google-cloud-functions


【解决方案1】:

您的 createUser 云函数由 Firestore onCreate() 事件类型触发,因此将根据 documentation“在第一次写入文档时触发”。

该文档还添加了以下内容:

在典型的生命周期中,Cloud Firestore 函数会执行以下操作:

  1. 等待对特定文档的更改。 (在这种情况下是第一次编写文档时)

  2. 在事件发生时触发并执行其任务

  3. 接收一个数据对象,其中包含存储在指定文档中的数据的快照。

因此,如果您想从“外部世界”触发此云功能,例如从 node.js 应用程序中,您需要在相应的位置创建一个新的 Firestore 文档,即在 users 集合下。为此,您将使用 Node.js 服务器 SDK,请参阅 https://cloud.google.com/nodejs/docs/reference/firestore/0.14.x/

请注意,您还可以通过使用相应的客户端 SDK 创建新的 user 文档从客户端应用程序(Web、Android、iOS)触发它。


跟随你的 cmets 更新:

您不能直接“移植”并运行为 Cloud Functions 编写的代码到 Node.js 应用程序。您将不得不为 Node.js 重新开发您的解决方案。

在您的情况下,您应该使用 Node.js 服务器 SDK(正如我的评论中提到的),您可以使用 CollectionReference 的 onSnapshot 方法。见https://cloud.google.com/nodejs/docs/reference/firestore/0.14.x/CollectionReference#onSnapshot

【讨论】:

  • 我想在我的节点应用程序中收听这些事件,但 createUser() 是从移动应用程序调用的,那么节点中的代码应该是什么?
  • “createUser() 是从移动应用程序调用的”到底是什么意思?根据您的代码, createUser() 是由 Firestore onCreate() 事件类型在 后端 触发的云函数。那么如何从移动应用程序调用它呢?能不能说的更准确一点。
  • 当我从移动应用程序向 users/{userId} 添加记录时,会触发以下事件,所以我想在节点中收听此事件 - toexports.createUser = functions.firestore .document('users /{userId}') 如何实现?
  • @YogeshwarTanwar 好的,我明白了!我已经更新了我的答案,希望对您有所帮助。
  • 很高兴能为您提供帮助。如果您认为答案有价值,您可以考虑投票。谢谢!
【解决方案2】:

我会尝试回答你的问题,但有点不清楚。你问:

如何获取谷歌云函数执行事件

好吧,当函数触发并且您的代码正在运行时,事件已经开始,即您的行const newValue = snap.data()

也许您正在寻找一种方法来执行某些任务,当触发器运行时?您只需从函数内部执行此操作,然后返回一个 Promise。例如,如果您要运行多个异步任务,则可以使用 Promise.all([])。

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2021-05-06
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2019-02-24
    相关资源
    最近更新 更多