【问题标题】:Debugging Firebase functions locally (node.js)在本地调试 Firebase 函数 (node.js)
【发布时间】:2020-03-07 13:54:43
【问题描述】:

见下文,我的代码非常简单....它在实时数据库中侦听数据库字段的更改。

const functions = require("firebase-functions");
var admin = require("firebase-admin");

exports.onActiveUpdate = functions.database
  .ref("/profiles/users/{userId}/active")
  .onUpdate((change, context) => {
      //code here

    return true;
  });

我尝试使用以下命令在本地调试代码

firebase serve --only functions
firebase serve
firebase emulators:start

我总是收到相同的信息...

+  functions: Emulator started at http://localhost:5001
i  functions: Watching "C:\code\rn\xs\fb_functions\functions" for Cloud Functions...
i  functions[onActiveUpdate]: function ignored because the database emulator does not exist or is not running.
+  All emulators started, it is now safe to connect.

但是当我转到 localhost:5001....时,我看到的只是一个空白页面,顶部带有 {"status":"alive"}

这是正确的行为吗? 谢谢

【问题讨论】:

标签: debugging firebase-realtime-database google-cloud-functions firebase-cli


【解决方案1】:

您可以通过运行以检查模式运行模拟器:

firebase emulators:start --inspect-functions

查看它正在侦听哪个端口进行调试(例如端口 9229 )。 如果您使用的是 VSCode,则在 .vscode 子目录中有一个 launch.json

   {
    "configurations": [
        {   "type": "node",
            "request": "attach",
            "name": "Debug",
            "port": 9229
        }
     ]
   }

然后只需单击 VScode 中的“调试”图标即可连接到正在运行的进程。 现在在你的函数代码中放置一些断点并通过浏览器调用它们。

【讨论】:

    【解决方案2】:

    pref 给出的解决方案。下面是我的 .vscode/launch.json

    {
        "configurations": [
            {   "type": "node",
                "request": "attach",
                "name": "Node.js-Debugger",
                "port": 9229
            }
        ]
    }
    

    下面是我的 firebase 命令。

    $ firebase emulators:start --inspect-functions --import emulator_data --export-on-exit
    

    【讨论】:

      【解决方案3】:

      我刚刚尝试了 firebase 模拟器套件,发现它确实启用了node.js Inspector,因此可以很好地支持逐步本地调试。

      假设您的所有模块都适合模拟器,因此我们可以专注于启用本地调试。

      我选择 MS Code 作为我的 Inspector Client。

      • 执行firebase emulators:start 并验证您的函数在本地运行良好。
      • 转到 MS Code 运行/调试屏幕,选择“添加配置...”并选择“{}Node.js:附加到进程”以创建新的 .vscode/launch.json。您将看到生成了名为“Attach by Process ID”的调试配置。
      • 从 MS 代码运行/调试屏幕,运行这个新的“按进程 ID 附加”调试器。系统将要求您选择一个节点进程来附加调试器。
      • 您应该在所有其他 node.js 进程中看到 2 个“functionsEmulatorRuntime”进程(1 个用于 functionsEmulator 本身,另一个用于您的函数代码)。尝试选择它们中的每一个并检查调试器是否能够在断点处暂停。

      【讨论】:

      • 这对我来说就像一个冠军。谢谢,@Dery!
      【解决方案4】:

      您可以使用https://github.com/GoogleChromeLabs/ndb 来调试您的 http firebase 函数。

      在本地或全局安装它并使用 ndb 运行您的正常服务命令:

      ndb yarn serve

      【讨论】:

        【解决方案5】:

        根据documentation,启动云函数和实时数据库模拟器的命令行是这样的:

        firebase emulators:start --only database,functions
        

        【讨论】:

        • ...当我尝试此操作时,我收到一个新错误......“未启动数据库模拟器,请确保您已运行 firebase init”。我第一次创建项目时肯定运行了“firebase init 函数”
        • 同时运行firebase init database 来初始化数据库产品。
        • 好的,谢谢 - 我现在在端口 5001 上有函数模拟器,在端口 9000 上有数据库模拟器。我想在我的函数中设置一个断点,以便在数据库更新触发它时单步执行我的代码.我去哪个 URL 去调试?谢谢
        • 模拟器套件目前不支持单步调试。正在处理中。
        • 好吧,这很有趣.....所以现在您只使用模拟器进行控制台输出?你能告诉我如何运行一个函数并查看控制台输出吗?抱歉所有问题,但我是新手
        猜你喜欢
        • 2020-01-28
        • 2019-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 2018-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多