在本地调试Firebase功能(node.js)

时间:2019-11-11 21:15:11

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

下面看到我的代码很简单。...它侦听实时数据库中数据库字段的更改。

text = df["Sentences"].tolist()

df_text = pd.DataFrame(columns=['Start', 'End', 'Text'])

switch = 1
collect_sentence = ""

for i_start, time_start in enumerate(df["Start_Time"]):
     time_end = df["End_Time"][i_start]

     if i_start > 0:
         time_list_start = time_list[switch-1]
         time_list_end = time_list[switch]


         if time_start >= time_list_start and time_end <= time_list_end:
             collect_sentence= collect_sentence + text[i_start]

         if time_start >= time_list_start and time_end > time_list_end and time_start < time_list_end:

             duration_before = time_list_end - time_start
             duration_after = time_end - time_list_end 

             if duration_after < duration_before:
                 collect_sentence + text[i_start]
             else:
                 df_text = df_text.append({
                                  'Start': int(time_list_start), 'End': int(time_list_end), \
                                  'Text': collect_sentence}, ignore_index = True)

                 switch += 1
                 collect_sentence = text[i_start]

         if time_start > time_list_end:
             df_text = df_text.append({
                                  'Start': int(time_list_start), 'End': int(time_list_end), \
                                  'Text': collect_sentence}, ignore_index = True)

             switch += 1
             collect_sentence = text[i_start]

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

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

但是当我转到localhost:5001时。...我看到的是空白页,顶部是+ 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.

这是正确的行为吗? 谢谢

5 个答案:

答案 0 :(得分:2)

您可以通过运行以下命令在检查模式下运行模拟器:

firebase emulators:start --inspect-functions

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

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

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

答案 1 :(得分:0)

根据documentation,用于启动云功能和实时数据库仿真器的命令行是:

firebase emulators:start --only database,functions

答案 2 :(得分:0)

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

在本地或全局安装它,并使用ndb运行常规的serve命令:

ndb yarn serve

答案 3 :(得分:0)

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

假设您所有的模块都适合仿真器,那么我们可以专注于启用本地调试。

我选择MS Code作为我的检查器客户端。

  • 执行firebase emulators:start并确认您的功能在本地环境中工作正常。
  • 转到“ MS Code运行/调试”屏幕,选择“添加配置...”,然后选择“ {} Node.js:附加到进程”以创建新的.vscode / launch.json。您将看到名为“按进程ID附加”的调试配置。
  • 在“ MS Code运行/调试”屏幕上,运行此新的“按进程ID附加”调试器。您将被要求选择一个节点进程来附加调试器。
  • 您应该在所有其他的node.js进程中看到2个“ functionsEmulatorRuntime”进程(其中1个用于functionsEmulator本身,另外1个用于您的功能代码)。尝试选择它们中的每一个,并检查调试器是否能够在您的断点处暂停。

答案 4 :(得分:0)

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