firebase - 通过 HTTP 触发时 Firebase Cloud Function 执行两次
问题描述
我正在尝试将 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 请求按预期工作,我在控制台中只看到一次“Hello from Firebase!”,但是当我查看函数日志时,它显示它被执行了两次。
我对 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);
推荐阅读
- emgucv - 使用 EMGU 获取像素值的“真实世界”坐标
- java - 工厂模式是否最适合我的情况?
- c# - 来自库的 C# 十六进制字符串在智能感知和元数据中显示为“解码”
- javascript - 如何操作其值为来自 ngFor 的属性的 ngmodel
- reactjs - 如何使用 formik 和 typescript、钩子构建自定义 onSubmit 函数
- vue.js - Vue构建后第一次加载耗时5分钟以上
- spring-boot - Spring-batch 未从 setTablePrefix 获取表前缀
- javascript - 如何使用环境变量在 Nuxt 中动态导入 SCSS 样式表
- oracle - 如何仅使用 Oracle 工具将数据库(或仅表)从 PostgreSQL 迁移(转换)到 Oracle?
- hp-uft - 我需要在 UFT One 中添加哪些插件,以便框架类应为 SAPFrame?