如果它不希望返回任何内容,我应该在 https 可调用函数中返回什么

我已经实现了一个 HTTPs (onCall) 函数,它会向客户端抛出一些错误,或者在工作成功完成时返回true 。问题是我不明白为什么要返回 true (因为当我抛出错误时我不返回false)。


HTTP协议需要返回一个response给客户端来完成一个请求,我应该给客户端返回什么?我正在考虑删除我抛出的错误并返回一个经典的 HTTP 响应(状态代码、正文……)。


有任何想法吗?这是我在做什么:


exports.function = functions

  .region("us-central1")

  .runWith({ memory: "2GB", timeoutSeconds: 120 })

  .https.onCall(async (data, context) => {


        // Lazy initialization of the Admin SDK

        if (!is_function_initialized) {

          // ... stuff

          is_uploadImage_initialized = true;

        }

    

        // ... asynchronous stuff

    

        // When all promises has been resolved...

        // If work completed successfully

        return true;

    

       /*

         Is it correct instead ???

         return {code: "200 OK", date: date, body: message };

       */

    

    

       // Else, if errors

       throw new Error("Please, try again later.");

    

       /*

         Is it correct instead ???

         return {code: "418 I'm a teapot", date: date, body: message };

       */


   }


宝慕林4294392
浏览 113回答 1
1回答

噜噜哒

如文档中所述:要使用 HTTPS 可调用函数,您必须将适用于您平台的客户端 SDK 与functions.https后端 API(或实施协议)一起使用这意味着您在任何情况下都必须遵循该协议,因为客户端 SDK 确实实现了该协议。那么让我们看看关于发送给客户端(即调用者或消费者)的响应的协议是怎么说的:协议规定了Response Body的格式如下:来自客户端端点的响应始终是一个 JSON 对象。它至少包含data或error,以及任何可选字段。如果响应不是 JSON 对象,或者不包含数据或错误,则客户端 SDK 应将请求视为失败并显示 Google 错误代码 INTERNAL 。error - ....data- 函数返回的值。这可以是任何有效的 JSON 值。firebase-functions SDK 自动将用户返回的值编码为这种 JSON 格式。客户端 SDK 根据下面描述的序列化格式自动将这些参数解码为本机类型。如果存在其他字段,则应忽略它们。因此,要回答您的问题“我应该向客户端返回什么?”,您应该返回可以进行 JSON 编码的数据。另请参阅协议文档的这一部分。例如,如文档中所述,在 Callable Cloud 中,您可以执行return {  firstNumber: firstNumber,  secondNumber: secondNumber,  operator: '+',  operationResult: firstNumber + secondNumber,};//Excerpt of the doc或者,你可以做return {result: "success"}在您的特定情况下(“如果它不希望返回任何内容,我应该在 https 可调用函数中返回什么”)您很可能会返回以下内容,正如您在问题中提到的:const date = new Date();const message = "the message";return { code: "200 OK", date: date, body: message };但是您也可以做return true;或return null;...在某种程度上由您来决定在您的上下文中什么是有意义的。请注意,在您返回{ code: "200 OK", date: date, body: message }值的情况下code,客户端不会将其视为 HTTP 响应代码,因为此 JSON 对象被注入到响应主体中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript