firebase 函数模拟器 useFunctionsEmulator() 方法不起作用

Posted

技术标签:

【中文标题】firebase 函数模拟器 useFunctionsEmulator() 方法不起作用【英文标题】:firebase functions emulator useFunctionsEmulator() method not working 【发布时间】:2020-01-01 05:24:46 【问题描述】:

我目前正在尝试在本地测试我的云功能。 我找到了几种方法,但使用 firebase 模拟器和 useFunctionsEmulator() 方法似乎很棒。在https://firebase.google.com/docs/functions/local-emulator,他们没有说方法,但我在这个网址How to test `functions.https.onCall` firebase cloud functions locally?上找到了。

但是,当我运行 firebase emulator:start 和 console.log(firebase.functions().useFunctionsEmulator('http://localhost:5001') 时,它只是显示未定义。

我在原点上尝试了几个输入,但没有任何改变。互联网上关于此的信息很少,我认为那是因为这是 alpha,所以请帮助我。

【问题讨论】:

我有同样的问题 你能多展示一些你的代码吗?预计useFunctionsEmulator 返回未定义,它只是更改设置。但是,下次您调用“可调用”函数时,它应该与模拟器对话,而不是与生产环境对话。 这方面有什么更新吗? 【参考方案1】:

在客户端初始化 firebase 应用后,我通过调用 useFunctionsEmulator() 方法让模拟器工作并处理本地请求。调用它之前会导致错误。

firebase.initializeApp(config);
firebase.functions().useFunctionsEmulator("http://localhost:5001");

【讨论】:

好吧,就像其他人回答的那样, useFunctionsEmulator 应该在 initializeApp 之后使用来设置东西。感谢您的回复,对于迟到的评论表示抱歉。 每次调用functions()时是否需要调用useFunctionsEmulator(..)【参考方案2】:

useFunctionsEmulator() 不返回任何内容,它只是一个 setter。

按以下方式使用:

firebase.initializeApp(config);

const functions = firebase.functions();
functions.useFunctionsEmulator("http://localhost:5001");

【讨论】:

它对我有用,这应该是公认的答案!【参考方案3】:

我也无法获得useFunctionsEmulator(),但我有一个解决方法:

我将onCall 函数切换为onRequest 函数,如下所示:

// FROM THIS
exports.exampleFunction = functions.https.onCall((data, context) => 
  // CODE FOR CLOUD FUNCTION
);
// TO THIS
exports.exampleFunction = functions.https.onRequest((request, response) => 
  // CODE FOR CLOUD FUNCTION
);

然后我可以使用此命令在本地提供我的功能firebase serve --only functions,它将显示一个url,我可以通过curl、邮递员或我的浏览器向它发送请求。当我编辑完函数后,我将它切换回onCall 函数。我希望这有帮助!

【讨论】:

【参考方案4】:

正如@app_ 所写,但这对某人来说可能是值得的:

如果您使用区域,它们应该只为在线呼叫设置,而不是模拟的。这对我有用(javascript 客户端):

const fns = LOCAL ? firebase.app().functions() :
  firebase.app().functions(functionsRegion);

const log = fns.httpsCallable('logs_v200719');

LOCAL 之前设置为true,如果我们知道我们是针对模拟后端运行的。请让我知道是否有从 Firebase 客户端嗅探的标准方法。

为了开发者的经验,最好在本地以相同的方式处理区域,这意味着不需要上述三元运算符。

firebase-tools 8.6.0,JavaScript 客户端 7.16.1

【讨论】:

【参考方案5】:

打电话时遇到问题

firebase.functions().useFunctionsEmulator("http://localhost:5001");

您可以通过添加此行在您的应用中测试您的 onCall 方法。

FirebaseFunctions functions = FirebaseFunctions.getInstance();
        functions.useEmulator("10.0.2.2", 5001);

functions.UseFunctionsEmulator("http://localhost:5004");

这是我的来源:https://firebase.google.com/docs/functions/local-emulator

编辑:也可以在 node.js 中使用

const admin = require('firebase-admin');
admin.initializeApp();
admin.database().useEmulator('127.0.0.1', 5001);

【讨论】:

以上是关于firebase 函数模拟器 useFunctionsEmulator() 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

firebase 函数模拟器 useFunctionsEmulator() 方法不起作用

Firebase 模拟器:在函数中使用 PubSub

从 Flutter 应用通过本地网络连接到 Firebase 函数模拟器

从 Flutter 应用程序连接到本地 Firebase 函数模拟器时出错

如何在 https 而不是 http 上运行 firebase(函数)模拟器?

Firebase 函数模拟器错误:找不到模块“../service-account.json”