为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

宝慕林4294392 2022-12-22 12:45:26
我已经实现了一个 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 };       */   }
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

文档中所述:

要使用 HTTPS 可调用函数,您必须将适用于您平台的客户端 SDK 与functions.https后端 API(或实施协议)一起使用

这意味着您在任何情况下都必须遵循该协议,因为客户端 SDK 确实实现了该协议。

那么让我们看看关于发送给客户端(即调用者或消费者)的响应的协议是怎么说的:

协议规定了Response Body的格式如下:

来自客户端端点的响应始终是一个 JSON 对象。它至少包含dataerror,以及任何可选字段。如果响应不是 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 对象被注入到响应主体中。


查看完整回答
反对 回复 2022-12-22
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号