gpt4 book ai didi

通过 HTTP 触发时 Firebase 云函数执行两次

转载 作者:行者123 更新时间:2023-12-03 22:09:32 29 4
gpt4 key购买 nike

我正在尝试将 Firebase Cloud Functions 集成到我的 Ionic 3 应用程序中。目标是创建一个云函数,该函数将使用管理 SDK 创建一个用户。

但是,当通过 HTTP 触发此函数时,它只会在将数据传递给它时执行两次,如果我只是调用没有数据的函数,它会按预期执行一次。

云函数代码:

const functions = require('firebase-functions');

exports.createUser = functions.https.onRequest((request, response) => {
response.set('Access-Control-Allow-Origin', '*');
response.set('Access-Control-Allow-Headers', 'Content-Type');
console.log(request.body);
response.status(200).send('Hello from Firebase!');
});

HTTP请求:

axios.post(functionURL, {
data: 'some data'
})
.then(res => {
console.log(res.data);
})
.catch(err => console.log(err));

上面的 HTTP 请求按预期工作,我看到“来自 Firebase 的您好!
"在控制台中只有一次,但是当我查看函数日志时,它显示它被执行了两次。

enter image description here

我对 Firebase Cloud Functions 非常陌生,因此我们将不胜感激任何输入或建议!

最佳答案

解决了

解决方案在这里找到:Cloud Functions for Firebase triggering function on CORS preflight request

当我将数据作为 application/json 发送时,它触发了 CORS 预检请求,这正是导致函数在传递数据时执行两次的原因。

为了绕过这个,我只是将数据作为 application/x-www-form-urlencoded 字符串发送,如下所示:

const dataStr = JSON.stringify(objectToPass);

axios({
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: `data=${dataStr}`
})

然后将主体解析回函数中的对象,如下所示:

const data = JSON.parse(request.body.data);

关于通过 HTTP 触发时 Firebase 云函数执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55379651/

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