我目前正在努力在本地测试我的云功能。 我发现了几种方法,但是使用firebase模拟器和useFunctionsEmulator()方法似乎很棒。在https://firebase.google.com/docs/functions/local-emulator,他们没有提及该方法,但我在网址How to test `functions.https.onCall` firebase cloud functions locally?上找到了它。
但是,当我运行firebase仿真器:start和console.log(firebase.functions()。useFunctionsEmulator('http://localhost:5001')时,它只是显示未定义。
我尝试了几个关于原点的输入,但是没有改变。互联网上关于此的信息很少,我认为这是因为它是Alpha,所以请对此提供帮助。
答案 0 :(得分:5)
useFunctionsEmulator()
不返回任何内容,只是一个设置器。
通过以下方式使用它:
firebase.initializeApp(config);
const functions = firebase.functions();
functions.useFunctionsEmulator("http://localhost:5001");
答案 1 :(得分:1)
我也无法获得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
函数。我希望这有帮助!
答案 2 :(得分:1)
在客户端中初始化Firebase应用之后,我通过调用useFunctionsEmulator()方法使模拟器工作并处理本地请求。事先调用它会导致错误。
firebase.initializeApp(config);
firebase.functions().useFunctionsEmulator("http://localhost:5001");
答案 3 :(得分:0)
正如@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