开始使用(续)(续11)

Python

@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

main.py

向 Cloud Firestore 写入数据时,系统会执行“转换为大写”函数,定义要监听的文档。考虑到性能原因,定义应尽可能具体。

大括号可用于括住“参数”(例如 {documentId}),即在回调函数中提供其匹配数据的通配符。每当添加了新消息时,Cloud Firestore 都会触发回调函数。

在 Node.js 中,事件驱动型函数(如 Cloud Firestore 事件)是异步的。回调函数应返回 null、一个对象或一个 Promise。如果您不返回任何结果,函数就会超时,示意发生错误,然后重试。请参阅同步、异步和 Promise。

模拟函数的执行

借助 Firebase Local Emulator Suite,您可以在本地机器上构建和测试应用,而无需部署到 Firebase 项目。我们强烈建议在开发期间进行本地测试,部分原因是可以降低因代码错误(例如无限循环)而在生产环境中产生费用的风险。

如需模拟函数,请执行以下操作:

  1. 运行 firebase emulators:start 并检查 Emulator Suite UI 的网址输出。它默认为 localhost:4000,但可以托管在您机器的其他端口上。在浏览器中输入该网址,以打开 Emulator Suite UI。
  2. 检查 firebase emulators:start 命令的输出,查找 HTTP 函数的网址。它看起来类似于 http://localhost:5001/MY_PROJECT/us-central1/addMessage,不同之处在于:

  3. MY_PROJECT 将被替换为您的项目 ID。

  4. 您的本地机器上的端口可能不同。
  5. 将查询字符串 ?text=uppercaseme 添加到函数网址的末尾,其格式应类似于 http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme。(可选)您可以将消息“uppercaseme”更改为自定义消息。
  6. 在浏览器的新标签页中打开该网址,创建一条新消息。
  7. 在 Emulator Suite UI 中查看函数的效果:

  8. 在日志标签页中,您应该会看到表示 HTTP 函数已成功运行的新日志:

    i functions: Beginning execution of "addMessage"

    i functions: Beginning execution of "makeUppercase" 2. 在 Firestore 标签页中,您应该会看到包含原始消息及此消息的大写版本(如果最初是“uppercaseme”,则显示“UPPERCASEME”)的文档。

将函数部署到生产环境

函数在模拟器中按预期工作后,您就可以继续执行后续步骤,在生产环境中部署、测试和运行这些函数。请注意,如需在生产环境中进行部署,您的项目必须采用 Blaze 定价方案。请参阅 Cloud Functions 价格。

如需完成本教程,请部署您的函数,然后执行这些函数。

  1. 运行以下命令部署您的函数:

firebase deploy --only functions

运行此命令后,Firebase CLI 会输出任何 HTTP 函数端点的网址。在您的终端中,您应该会看到如下所示的一行输出:

Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage

该网址包含您的项目 ID 以及 HTTP 函数的区域。虽然您现在还用不着考虑这一点,但一些生产 HTTP 函数应指定位置以尽可能缩短网络延迟时间。

如果遇到访问错误,例如“Unable to authorize access to project”(无法授予项目访问权限),请尝试检查您的项目别名。 2. 使用 CLI 输出的网址,添加文本查询参数,并在浏览器中打开该网址:

https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo

函数就会执行,并将浏览器重定向到 Firebase 控制台中存储着该文本字符串的数据库位置。此写入事件会触发“转换为大写”函数,该函数会写入字符串的大写版本。

部署和执行函数后,您可以在 Google Cloud 控制台中查看日志。如果您需要在开发或生产环境中删除函数,请使用 Firebase CLI。

在生产环境中,您可能希望设置要运行的实例数下限和上限,以优化函数性能并控制费用。如需详细了解这些运行时选项,请参阅控制扩缩行为。