Rau*_*aul 5 javascript firebase google-cloud-platform google-cloud-functions
我已经实现了一个 HTTPs (onCall) 函数,如果工作成功完成,它会向客户端抛出一些错误或返回true。问题是我不明白为什么要返回 true (因为当我抛出错误时我不返回false)。
由于 HTTP 协议需要向客户端返回响应才能完成请求,那么我应该向客户端返回什么?我正在考虑删除我抛出的错误并返回一个经典的 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 };
*/
}
Run Code Online (Sandbox Code Playgroud)
正如文档中所解释的:
要使用 HTTPS 可调用函数,您必须使用适合您平台的客户端 SDK 以及
functions.https后端 API(或实现协议)
这意味着在任何情况下您都必须遵循该协议,因为客户端 SDK 确实实现了该协议。
协议规定了Response Body的格式如下:
来自客户端端点的响应始终是 JSON 对象。它至少包含 或
data,error以及任何可选字段。如果响应不是 JSON 对象,或者不包含数据或错误,则客户端 SDK 应将请求视为失败,并显示 Google 错误代码 INTERNAL 。
error- ....
data- 函数返回的值。这可以是任何有效的 JSON 值。firebase-functions SDK 会自动将用户返回的值编码为这种 JSON 格式。客户端 SDK 根据下面描述的序列化格式自动将这些参数解码为本机类型。如果存在其他字段,则应忽略它们。
因此,要回答您的问题“我应该向客户端返回什么?”,您应该返回可以 JSON 编码的数据。另请参阅协议文档的这一部分。
例如,正如文档中详细介绍的,在可调用云中,您可以执行以下操作
return {
firstNumber: firstNumber,
secondNumber: secondNumber,
operator: '+',
operationResult: firstNumber + secondNumber,
};
//Excerpt of the doc
Run Code Online (Sandbox Code Playgroud)
或者,你可以这样做
return {result: "success"}
Run Code Online (Sandbox Code Playgroud)
在您的具体情况下(“如果 https 可调用函数不希望返回任何内容,我应该返回什么”),正如您在问题中提到的那样,您很可能返回以下内容:
const date = new Date();
const message = "the message";
return { code: "200 OK", date: date, body: message };
Run Code Online (Sandbox Code Playgroud)
但您也可以这样做return true;或return null;...这取决于您来决定在您的上下文中什么是有意义的。
请注意,在您返回的情况下,客户端不会将{ code: "200 OK", date: date, body: message }的值code视为 HTTP 响应代码,因为此 JSON 对象已注入到响应正文中。
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |