【发布时间】:2020-07-12 17:40:06
【问题描述】:
首先,请注意,我对 JS 和编码非常陌生 :)
期望的行为:
我编写了以下 JS HTTPS Firebase 函数,该函数接受查询参数locationId,它执行 GET API 调用并将响应保存回 Firebase。该代码根据需要正确地将数据保存到 Firebase。我遇到过类似的问题,但我正在努力使这些解决方案适应我下面的具体问题。据我所知,我只发送一次响应。
具体错误:以下是控制台输出
标头发送到客户端后无法设置
未处理的拒绝
我的功能:
exports.doshiiGetMenuForOnboardedVenue = functions.https.onRequest((req, res) => {
// Forbidding PUT requests.
if (req.method === 'PUT') {
return res.status(403).send('Forbidden!');
}
cors(req, res, () => {
const locationId = req.query.locationId;
console.log('locationId', locationId);
if (locationId){
console.log('locationId', locationId);
var token = jwttoken();
const options = {
headers: {
'content-type': 'application/json',
'authorization': 'Bearer ' + token}
};
const uri = 'https://sandbox.doshii.co/partner/v3/locations/' + locationId + '/menu?lastVersion=:lastVersion&filtered=true'
axios.get(uri, options)
.then(response => {
return admin.database().ref(`/venue-menus/${locationId}/`).set(response.data)
.then(response => {
return res.status(200).send(locationId)
})
.catch(err => {
return res.status(500).send({error: err})
})
})
.then(response => {
return res.status(200).send(locationId)
})
.catch(err => {
return res.status(500).send({error: err})
})//end axios
} else {
return res.status(500).send({error: 'locationId missing'})
}//end if-else (!locationId)
})//end cors
});
【问题讨论】:
-
错误消息告诉您,您的代码试图发送多个响应。每次函数调用只能调用一次
res.send。
标签: javascript firebase error-handling promise google-cloud-functions