gpt4 book ai didi

firebase - 如何根据数据库模拟器更新触发 Firebase 函数模拟器

转载 作者:行者123 更新时间:2023-12-04 12:05:53 25 4
gpt4 key购买 nike

总之,我想测试一个 Firebase function本地,特别是由 realtime database trigger 触发的.根据 the docs for local testing ,似乎有两种方法可以完成 Firebase 功能的本地测试:

  • 使用 firebase 函数模拟器 ( firebase emulators:start --only functions )
  • 使用 firebase 函数 shell ( firebase functions:shell )

  • 首先,至少在链接指南中,两者之间的差异非常不清楚。对于阅读本文的 Firebase 人员来说,此处的文档更新会很棒(考虑到对这些内容的本地测试是如此重要的功能)。

    我对这个问题的关注(关于我尝试过的)基于模拟器,即因为提到有“ interactions with other services”。有趣的是,那里的列表只包括两个项目:
  • Cloud Firestore
  • Firebase 托管

  • 实时数据库有一个明显的遗漏,也许这就是差距所在,但我们走了。

    我的函数看起来像这样:

    console.log("Hello World")

    exports.myDatabaseTrigger = functions.database.ref('/a/path/{id}').onCreate((data, context) => {
    console.log(`myDatabaseTrigger triggered - here's my path ${data.ref.path}`);

    //manipulate some other stuff in the DB
    })

    在我的项目中,我同时使用函数和实时数据库,所以我运行命令 firebase emulators:start它启动了两个模拟器。

    在 Postman 中,我使用本地 Realtime Database REST API使用以下参数发布一些数据:
    POST
    http://localhost:9000/a/path.json
    {
    "some": "data"
    }

    我在 /a/path 下收到一个包含新创建项目名称的响应。 .但是,我的 Firebase 函数永远不会触发,而且我永远不会看到内部日志(尽管 Hello World 日志确实会在模拟器启动时打印出来)。

    那么,这两个模拟器之间可以交互吗?或者,我是否被迫使用功能 shell ?我对 shell 的问题是,基于 realtime database examples ,如果我只是用一些随机值(例如 data.ref.path )调用我的函数,则不清楚 DataSnapshot 变量(即 myDatabaseTrigger({"some": "data"}) )会是什么。

    最佳答案

    看起来您可能刚刚忘记了项目/命名空间 ID。

    尝试添加 ?ns= POST 的参数:

    POST
    http://localhost:9000/a/path.json?ns="YOUR_PROJECT_ID"
    {
    "some": "data"
    }

    模拟函数 只有触发从写入单个数据库实例,就像在生产中一样。

    至于你的困惑点:
  • functions:shell只是函数的 REPL。它不模拟任何其他服务(数据库、Firestore 等)。相反,您直接传入来自这些服务的数据。
  • 如果您想测试函数 <--> 数据库交互,请使用 emulators:start --only database,functions
  • 一般来说,规则与 emulators:start是我们全面模拟正在运行的任何东西。因此,例如,如果您正在运行函数和数据库模拟器,则来自函数的所有写入(通过 admin.database().... 将被重定向到数据库模拟器。但写入 Firestore ( admin.firestore()... ) 将尝试命中生产,因为该模拟器不是正在运行。
  • 关于firebase - 如何根据数据库模拟器更新触发 Firebase 函数模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60105501/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com