Написали функцию, которая отлично работает, кроме следующего:
Желаемое поведение: это сохранение response.data
полученного от ax ios GET обратного вызова в базе данных Firebase
Specifi c проблема: данные не сохраняются в Firebase, и функция завершается с кодом состояния: ошибка 500
- Код: следующий код фрагмент функции, строка, которая не работает, является .update (response.data)
Консоль выводит код состояния: 500 и k, posID, name
значения:
![enter image description here](https://i.stack.imgur.com/2TcEg.png)
Код (редактировать: включить всю функцию согласно предоставленным комментариям) :
exports.doshiiMenuUpdatedWebhook = functions.https.onRequest((req, res) => {
// Forbidding PUT requests.
if (req.method === 'PUT') {
return res.status(403).send('Forbidden!');
}
cors(req, res, () => {
let verify = req.query.verify;
let locationId = req.body.data.locationId
let posId = req.body.data.posId
let type = req.body.data.type
let uri = req.body.data.uri
let itemUri = req.body.data.itemUri
var token = jwttoken();
const options = {
headers: {'authorization': 'Bearer ' + token}
};
switch (type) {
case 'products':
console.log('Event - specific menu item updated');
console.log('jwt: ', token);
axios.get(itemUri, options)
.then(response => {
console.log('response status: ', response.status);
console.log('response statusText: ', response.statusText);
return admin.database().ref(`/venue-menus/${locationId}/products`)
.once('value').then((snapshot) => {
var products = snapshot.val();
var keys = Object.keys(products);
for (var i = 0; i < keys.length; i++){
var k = keys[i];
var name = products[k].name;
var posID = products[k].posId;
if (posID === posId){
console.log(k, posID, name);
admin.database().ref(`/venue-menus/${locationId}/products/${key}/`).update(response.data);
}//end if
}//end for
return snapshot
});
})
.then(response => {
return res.status(200).send(type)
})
.catch(err => {
return res.status(500).send({error: err})
})//end axios
break;
case 'options':
console.log('Event - specific menu option updated');
console.log('jwt: ', token);
break;
case 'surcounts':
console.log('Event - specific menu surcount updated');
console.log('jwt: ', token);
break;
default:
console.log('Event - entire menu updated');
console.log('jwt: ', token);
axios.get(uri, options)
.then(response => {
console.log('response status: ', response.status);
console.log('response statusText: ', response.statusText);
return admin.database().ref(`/venue-menus/${locationId}/`).set(response.data)
})
.then(response => {
return res.status(200).send(type)
})
.catch(err => {
return res.status(500).send({error: err})
})//end axios
}//end switch
})//end cors
});