【问题标题】:How to throw a custom error on a Firebase callable cloud function?如何在 Firebase 可调用云函数上引发自定义错误?
【发布时间】:2020-11-17 17:02:49
【问题描述】:

我正在为我的项目构建一个 API,我想抛出自定义错误以在我的应用程序中捕获它。

the documentation 之后,我用代码“未知”抛出错误

 throw new functions.https
  .HttpsError("unknown",
    "this is my error message", 
    {code :'myCustomCode', 
     message :'my custom message'}
   )

然后,我发现了正确的消息和详细信息,但出现了“内部服务器错误”

我不确定这是使用云功能创建干净 API 的最佳方式。

你有什么建议吗?

【问题讨论】:

    标签: javascript node.js firebase google-cloud-functions


    【解决方案1】:

    使用UNKNOWN Functions 错误代码,您将始终获得500 HTTP 响应状态代码。

    通过使用更有意义的错误码,在Protocol specification for https.onCall(以及here)提出的错误码中,您可以获得不同的响应状态码,例如:

    • INVALID_ARGUMENT 错误代码的 400 错误请求
    • 409 ALREADY_EXISTS 错误代码冲突
    • 等等……

    完整列表见here。还请查看文档的以下section

    【讨论】:

    • 其实我想我并没有理解“抛出错误的概念”,我只是想处理不同行为的响应(例如:“用户已经存在”,“今天没有更多的硬币”)。抛出错误主要是为了开发,对吧?
    • "抛出错误主要是为了开发" -> 好吧,如果你想在你的前端向用户显示在 Callable Cloud Function 中发生的错误的一些细节,你应该抛出一个错误(即functions.https.HttpsError 的实例,因为它是可调用的CF)并在前端使用代码/消息/详细信息。现在,您可以确定“今天不再有硬币”不是错误,而只是 CF 实现的业务逻辑的正常结果。然后,您将向客户端发送标准响应。
    • 请注意,Callable Cloud Functions 专门设计为从应用程序调用。如果您想通过 Cloud Functions 实现“纯”REST API,最好使用简单的HTTPS Cloud Function
    • 这是一场经典的辩论......技术和功能错误之间的界限在哪里......帐户,是失败的前提条件还是业务逻辑案例?您可能会在网上找到不同的意见,例如softwareengineering.stackexchange.com/questions/341732/….
    • "what FunctionErrorCode to use for Client Error" -> 对于功能/业务特定错误我不发送错误而是正常响应,即可以进行 JSON 编码的数据,请参阅firebase.google.com/docs/functions/…。例如:{result: "success"}{result: "error", detail: "not enough money"}。但同样,其他人可能会采取不同的做法......
    猜你喜欢
    • 2020-05-29
    • 2020-07-07
    • 2021-08-29
    • 2022-01-03
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2019-09-25
    相关资源
    最近更新 更多