Google Cloud Functions:返回有效的 JSON

Mic*_*ael 7 cloud json google-cloud-platform flutter google-cloud-functions

我正在尝试使用 cloud_functions 包从我的 Flutter 应用程序调用 Google Cloud 函数。

这是我的云功能:

export const helloWorld = functions.region('europe-west1').https.onRequest((request, response) => {
response.status(200).json({
    message: "Hello World!"
  });
});
Run Code Online (Sandbox Code Playgroud)

这是我调用此函数的颤振方法:

try {
  final dynamic resp =
      await CloudFunctions.instance.call(
    functionName: "helloWorld"
  );
  print(resp);

} on CloudFunctionsException catch (e) {
  ...
} catch (e) {
  ...
} finally {
  ...
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这是最简单的请求形式,没有任何参数。

我的问题: 对 Cloud Function 的每次调用都会导致 CloudFunctionsException。原因:“响应不是有效的 JSON 对象。 ”。

也许有人知道这里出了什么问题?如果我通过 Postman 或浏览器调用云函数,将返回一个有效的 JSON 对象,并且不会抛出任何异常。

提前致谢,迈克尔

Dou*_*son 6

如果要使用 Flutter SDK 调用可调用函数,则需要实际定义可调用函数。现在,您正在声明一个 HTTP 函数,这与此不同。请阅读可调用函数的文档以了解如何声明和实现可调用函数

取而代之的是:

functions.https.onRequest(...)
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

functions.https.onCall(...)
Run Code Online (Sandbox Code Playgroud)

然后,您返回一个 JavaScript 对象以转换为 JSON,而不是使用响应对象。


Mic*_*ael 5

我可以找到错误:一旦您定义了默认区域的另一个区域,flutter 包 cloud_functions 似乎无法再找到该函数:

作品:

export const helloWorld = functions.https.onCall((data, context) => {
    return {
        message: "Hello World"
    }
});
Run Code Online (Sandbox Code Playgroud)

不起作用:

export const helloWorld = functions.region('europe-west1').https.onCall((data, context) => {
    return {
        message: "Hello World"
    }
});
Run Code Online (Sandbox Code Playgroud)