首页 > 解决方案 > Firebase 云函数:调用可调用函数时无法提取参数

问题描述

我正在使用 Flutter SDK 调用云函数。我添加了一个参数someField,但在云端,它无法检索并且始终为undefined. 这就是我调用云函数的方式

static Future<void> doSomething() async {
  await Firebase.initializeApp();
  final HttpsCallable callable = CloudFunctions.instance.getHttpsCallable(
    functionName: 'myFunction',
  );
  dynamic resp = await callable.call(
    <String, dynamic>{
      'someField': 'Hurray!',
    },
  );
}

云函数写法如下

exports.myFunction = functions.https.onRequest((req, res) => {
  cors(req, res, () => {
      const myParameter = req.body.someField; // is always Undefined
      // also tried
      // req.query.someField
      // req.params.someField
      doSomething(myParamter)
  })
});

标签: javascriptfirebasefluttergoogle-cloud-functions

解决方案


您将客户端应用程序上的可调用函数与后端的HTTPS 函数混合在一起。请查看文档以了解它们之间的区别。如果您想在客户端使用 Firebase SDK 来调用 Cloud Functions,您应该声明 usingonCall而不是onRequest. 当您使用 编写可调用函数时onCall,您将可以通过传递给回调的第一个参数访问输入参数。

exports.myFunction = functions.https.onCall((data, context) => {
  // data.someField should be populated from your client request
});

推荐阅读