node.js - 在nodejs中的Firebase Functions HTTPS请求中报告错误的正确方法
问题描述
我在 node.js 中实现了一个 Firebase 函数,可以通过浏览器在 HTTPS 上简单地调用(我使用邮递员进行测试):
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
(链接到这个抛出错误),我不想重新启动任何东西,只是向调用者报告一个错误......我知道 onRequest 结果应该是一个承诺,如果我更改我的代码并将 a
return
放在前面notifications.SendNotifToAdmin(...)
(这将返回一个承诺),但这如何与return response.send(...)
? 那这也是回报承诺吗?
解决方案
我是否使用正确的方式将错误发送回调用者(通过 response.status(500).send("...."))
是的,这是需要发送 HTTP 状态代码的 HTTP 类型函数的标准。但是您应该发送一个 4xx 范围的 HTTP 代码来处理与客户端发送不正确信息有关的错误。
我知道 onRequest 结果应该是一个承诺
onRequest 类型函数绝对没有义务返回一个承诺。该函数只需要在所有 Promise 都解决后发送响应,以便在传递响应时终止函数之前完成异步工作。