我使用Firebase函数中的onRequest函数通过nodemailer发送电子邮件。
如果我在末尾以?senderName=Bob
格式传入参数,那么在浏览器中使用https://请求测试函数效果非常好
在我的函数中,我使用req.query.senderName
来检索变量。
当我使用Flutterfirecloud_functions dart插件时,我无法将变量传递给我的函数。以下是我的代码:
Future<void> sendEmail() async {
FirebaseFunctions functions = FirebaseFunctions.instance;
//TODO:remove when deployed
//functions.useFunctionsEmulator(origin: 'http://localhost:5001');
HttpsCallable callable = functions.httpsCallable('sendEmail');
try {
final HttpsCallableResult result = await callable.call(
{
'senderName': contactName,
},
);
print(result.data);
} on FirebaseFunctionsException catch (e) {
print('Firebase Functions Exception');
print(e.code);
print(e.message);
} catch (e) {
print('Caught Exception');
print(e);
}
}
我已经在firebase函数中记录了"req"的值,它返回以下行(为了清晰起见,删除了大多数行(
query: {},
...
body: { data: { senderName: 'Bob' } },
...
我的变量最终出现在"body"而不是"query"中,是不是做错了什么?或者这是一个错误?
不打算将onRequest类型的HTTP函数与使用可调用函数的Firebase SDK混合使用。可调用函数的SDK仅用于调用onCall类型的函数,如文档中所述。可调用函数函数有一个特殊的协议,SDK会向您隐藏所有这些细节。
如果你不想写onCall函数,而是需要使用onRequest,那么你不应该使用Firebase SDK来调用它。你应该使用Flutter的普通HTTP客户端。