开始使用(续)(续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 项目。我们强烈建议在开发期间进行本地测试,部分原因是可以降低因代码错误(例如无限循环)而在生产环境中产生费用的风险。
如需模拟函数,请执行以下操作:
- 运行
firebase emulators:start并检查 Emulator Suite UI 的网址输出。它默认为 localhost:4000,但可以托管在您机器的其他端口上。在浏览器中输入该网址,以打开 Emulator Suite UI。 -
检查
firebase emulators:start命令的输出,查找 HTTP 函数的网址。它看起来类似于http://localhost:5001/MY_PROJECT/us-central1/addMessage,不同之处在于: -
MY_PROJECT将被替换为您的项目 ID。 - 您的本地机器上的端口可能不同。
- 将查询字符串
?text=uppercaseme添加到函数网址的末尾,其格式应类似于http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme。(可选)您可以将消息“uppercaseme”更改为自定义消息。 - 在浏览器的新标签页中打开该网址,创建一条新消息。
-
在 Emulator Suite UI 中查看函数的效果:
-
在日志标签页中,您应该会看到表示 HTTP 函数已成功运行的新日志:
i functions: Beginning execution of "addMessage"i functions: Beginning execution of "makeUppercase"2. 在 Firestore 标签页中,您应该会看到包含原始消息及此消息的大写版本(如果最初是“uppercaseme”,则显示“UPPERCASEME”)的文档。
将函数部署到生产环境
函数在模拟器中按预期工作后,您就可以继续执行后续步骤,在生产环境中部署、测试和运行这些函数。请注意,如需在生产环境中进行部署,您的项目必须采用 Blaze 定价方案。请参阅 Cloud Functions 价格。
如需完成本教程,请部署您的函数,然后执行这些函数。
- 运行以下命令部署您的函数:
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。
在生产环境中,您可能希望设置要运行的实例数下限和上限,以优化函数性能并控制费用。如需详细了解这些运行时选项,请参阅控制扩缩行为。
