Как вернуть ‘Экземпляр ссылки на документ’ в Flutter из облачной функции?

#firebase #flutter #dart #google-cloud-firestore #google-cloud-functions

#firebase #flutter #dart #google-cloud-firestore #google-cloud-функции

Вопрос:

У меня есть облачная функция, которая содержит, среди прочего, эти три строки:

 const admin = require("firebase-admin");
const db = admin.firestore();
db.doc(path);
  

Я широко использую эти три строки во всей функции для взаимодействия с firestore. Они даже сохраняют ссылки на документы как таковые в firestore. Однако я не могу заставить их вернуть ссылку на документ во внешний интерфейс Flutter.

Переменная, назовем ее yourReference , сохраняется в firestore в одной строке, отображается как documentReference , а в следующей строке возвращается во внешний интерфейс Flutter следующим образом:

 response.json({
      referenceItem: yourReference,
    });
  

И все же интерфейс получает не экземпляр ссылки на документ, а карту с ключами, связанными со ссылкой на документ! Т. е. {_path:..., _firestore:...} и т.д. Пожалуйста, обратите внимание, что интерфейс Flutter отправляет post-запрос в облачную функцию, а не использует библиотеку облачных функций для Flutter.

Комментарии:

1. Вы на самом деле просто пытаетесь вернуть ссылку на документ клиенту или пытаетесь вернуть фактические данные документа? Из того, что у вас есть сейчас, неясно. Пожалуйста, отредактируйте вопрос, чтобы показать весь код функции, а также код Flutter, который вы используете для ее вызова. Если ваш код не работает или содержит ошибки, вы должны точно описать, что работает не так, как вы ожидаете.

Ответ №1:

DocumentReference — это просто ссылка на документ в базе данных. В вашем первом фрагменте ссылка не намного больше path . Итак, если вы хотите вернуть путь к документу пользователю Flutter, вы должны вернуть path , а не DocumentReference .

Если вы хотите вернуть пользователю фактическое содержимое документа, вам сначала нужно прочитать этот документ с помощью чего-то вроде:

 let doc = await db.doc(path).get();
console.log(doc.data());
  

doc.data() В этом фрагменте представлены данные из документа, которые затем вы захотите вернуть в приложение Flutter. Как это сделать, зависит от типа облачной функции, которую вы используете, но с функцией HTTPS это было бы что-то вроде.

 res.write(doc.data());
  

Комментарии:

1. Спасибо, Puf! Тогда я просто верну путь в виде строки! 🙂