我正在尝试将Firebase Cloud Functions集成到我的Ionic 3 App中。目标是创建一个云功能,该功能将使用admin 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的问候! “在控制台中只有一次,但是当我查看函数日志时,它表明它正在执行两次。
我是Firebase Cloud Functions的新手,因此非常感谢任何输入或建议!
答案 0 :(得分:0)
解决方案在这里: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);