#node.js #google-cloud-functions
#node.js #google-cloud-функции
Вопрос:
Я реализовал функцию Firebase, которая будет вызываться по протоколу HTTPS через браузер (я использую postman для тестирования) в node.js :
exports.notifToAdmin = functions.https.onRequest((request, response) => {
const title = request.query.title
const body = request.query.body
const badge = request.query.badge
if (typeof title === 'undefined') { return response.status(500).send("title missing") }
if (typeof body === 'undefined') { return response.status(500).send("body missing") }
if (typeof badge === 'undefined') { return response.status(500).send("badge missing") }
notifications.sendNotifToAdmin(title, body, badge)
.then(message => {
const ackString = fingerPrint(msg);
return response.send(ackString);
})
.catch(error => {
console.error(error);
return response.status(500).send(error);
});
});
-
использую ли я правильный способ отправки ошибок обратно вызывающему (через
response.status(500).send("....")
)? В документации по ошибкам Firebase я вижу использованиеthrow new Error(...)
. Итак, я не уверен, что то, что я делаю, является наиболее оптимальным способом? Я заметил, что в документе говорится//Will cause a cold start if not caught
(связано с этой ошибкой throw), я не хочу ничего перезапускать, просто сообщите об ошибке вызывающему… -
Я знаю, что результатом onRequest должно быть обещание, должен ли я изменить свой код и поставить a
return
передnotifications.SendNotifToAdmin(...)
(это возвращает обещание), но как это сочетается сreturn response.send(...)
? Тогда это также возвращает обещание?
Ответ №1:
использую ли я правильный способ отправки ошибок обратно вызывающему абоненту (через response.status(500).send(«….»))
Да, это стандартно для функций типа HTTP, которым необходимо отправить код состояния HTTP. Но вы должны отправить HTTP-коды диапазона 4xx для ошибок, связанных с отправкой клиентом неверной информации.
Я знаю, что результатом onRequest должно быть обещание
Функция типа onRequest не обязана возвращать обещание. Функции просто нужно отправить ответ после того, как все обещания будут разрешены, чтобы асинхронная работа могла завершиться до завершения функции при доставке ответа.