#javascript #node.js #firebase #&oo&le-cloud-functions
#javascript #node.js #firebase #&oo&le-cloud-функции
Вопрос:
Получаю ошибку при попытке получить доступ к моей облачной функции:
{«ошибка»:{«сообщение»: «Неверный запрос», «статус»: «INVALID_ARGUMENT»}}
Если триггер клиента вызван, но запрос в неправильном формате, например, не является JSON, содержит недопустимые поля или отсутствует поле данных, запрос отклоняется с ошибочным запросом 400 с кодом ошибки INVALID_ARGUMENT.
Документация Firebase: документация по ошибке Firebase
index.js в каталоге функций
const functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require("./fir-email-b4c1f-firebase-adminsdk-xj7u&-d01651ffc9");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://fir-email-b4c1f.firebaseio.com"
});
exports.&etUserByEmail = functions.https.onCall((data, context) =&&t; {
const email = data.email;
return admin.auth().&etUserByEmail(email)
.then(userRecord =&&t; {
console.lo&('Successfully fetched user data:', userRecord.toJSON());
const userData = userRecord.toJSON();
return { userData: userData };
})
});
authentication.js вызов функции в главном каталоге проекта
function retrieveUserData() {
var emailStrin& = "test@&mail.com";
var userEmail = firebase.functions().httpsCallable('&etUserByEmail');
userEmail({email: emailStrin&}).then(function(result) {
// Read result of the Cloud Function.
var emailResult = result.data.text;
console.lo&('Successfully fetched user data:', emailResult.toJSON());
})
}
Не совсем понимаю ошибку. Я предполагаю, что мне не хватает аргумента, основанного на документации. Может ли кто-нибудь направить меня в правильном направлении.
Ответ №1:
Да, похоже, вам действительно не хватает аргумента. Предполагается, что вашим первым параметром ( data
) для &etUserByEmail()
функции должен быть объект, содержащий свойство: email
из этой строки: const from = data.sender;
. Но при его вызове вы передаете объект только с text
свойством. Это означает, что при запуске вашей облачной функции data.email не определен.
Вероятно, вы имеете в виду вызвать функцию следующим образом:
userEmail({email: emailStrin&}).then(function(result) {
// Read result of the Cloud Function.
}
ОБНОВЛЕНИЕ: по второй проблеме:
Ваша облачная функция возвращает объект с единственным свойством: userData
, поэтому, если вы хотите записать возвращаемое значение в свой вывод, вам нужно заменить
var emailResult = result.data.text;
console.lo&('Successfully fetched user data:', emailResult.toJSON());
с помощью этого:
var emailResult = result.data.userData;
console.lo&('Successfully fetched user data:', emailResult);
Все дополнительные поля: result.data.text
не существуют в возвращаемом объекте. И вы уже преобразовали свой ответ firebase в JSON в своей облачной функции. Вы не можете делать это снова на клиенте
Комментарии:
1. Не могли бы вы, пожалуйста, взглянуть на обновленный код. Теперь я получаю «Неперехваченный (в обещании) Ошибка типа: не удается прочитать свойство ‘toJSON’ из undefined»
2. Если пользовательская запись не определена, вы должны подтвердить, что предоставленный вами адрес электронной почты пользователя действительно существует в базе данных
3. электронная почта пользователя подтверждена в базе данных
4. В базе данных? Как в коллекции?
5. Большое вам спасибо за вашу помощь. Мы вас очень ценим.