尝试访问我的云功能时出错:
{“错误”:{“消息”:“错误请求”,“状态”:“ INVALID_ARGUMENT”}}
如果调用了客户端触发器,但是请求有误 格式,例如不是JSON,字段无效或缺少 数据字段,该请求将被拒绝400错误请求,并带有 错误代码为INVALID_ARGUMENT。
Firebase文档:Firebase Error Documentation
index.js 在函数目录中
const functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require("./fir-email-b4c1f-firebase-adminsdk-xj7ug-d01651ffc9");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://fir-email-b4c1f.firebaseio.com"
});
exports.getUserByEmail = functions.https.onCall((data, context) => {
const email = data.email;
return admin.auth().getUserByEmail(email)
.then(userRecord => {
console.log('Successfully fetched user data:', userRecord.toJSON());
const userData = userRecord.toJSON();
return { userData: userData };
})
});
项目主目录中的authentication.js 调用函数
function retrieveUserData() {
var emailString = "test@gmail.com";
var userEmail = firebase.functions().httpsCallable('getUserByEmail');
userEmail({email: emailString}).then(function(result) {
// Read result of the Cloud Function.
var emailResult = result.data.text;
console.log('Successfully fetched user data:', emailResult.toJSON());
})
}
不完全了解该错误。我假设我缺少基于文档的论点。有人可以指引我正确的方向。
答案 0 :(得分:1)
是的,看来您确实缺少争论。 wprintf()
函数的第一个参数(printf()
)应该是包含以下属性的对象:data
,此行:getUserByEmail()
。但是,在调用它时,您传入的对象仅具有email
属性。这意味着,当您的云功能运行时,data.email是未定义的。
可能是您要这样调用函数:
const from = data.sender;
更新:关于第二个问题:
您的云函数返回的对象只有一个单独的属性:text
,因此,如果要在输出中记录返回的值,则需要替换
userEmail({email: emailString}).then(function(result) {
// Read result of the Cloud Function.
}
与此:
userData
所有额外字段:var emailResult = result.data.text;
console.log('Successfully fetched user data:', emailResult.toJSON());
在返回的对象上不存在。并且您已经在您的云函数中将Firebase响应转换为JSON。您不能在客户端上再次这样做