его предназначения
Вопрос:
Если запускать локально приложение использую firebase emulators start, то вызов функций будет происходить локально?
И второй вопрос:
Если вызов функций будет происходить локально, то никакой ошибки CORS быть не должно?
Если это так, то никаких манипуляций по настройки приложения на локальные порты делать не надо?
Спасибо.
1) Да 2) Зависит от варианта использования 3) Приложение надо настраивать. В документации есть инструкция
Добрый день, коллеги. В продолжении темы о настройке firebase emulators. Запустил на локальное среде использую команду firebase emulator:start Настроил function на локальный порт, как было написано в доке. А именно добавил cors export const cors = require('cors')({origin: true}); export const FN = firebase.functions() FN.useFunctionsEmulator("127.0.0.1", 5001) Задачу с CORS решил следующим путем. На примере одной функции exports.getTimeStamp = functions.https.onCall(function () { return new Promise(function (resolve) { cors(() => { console.log("getTimeStamp"); resolve({ timestamp: Date.now() }); }); }) }); После настройки появилось сообщение Error: Response is not valid JSON object. Кто-то сталкивался с таким сообщением в контексте firebase? Допустим firebase произвел у себя обновления. Мог firebase после обновления своего начать возвращать данные в другом виде в отличии от предыдущей своей версии?
Для onCall функций cors не надо настраивать, это делается автоматически. Cors нужно настраивать только для обычных http функций.
Да, действительно cors получается не нужен. И в итоге выяснилось что ошибка Error: Response is not valid JSON object. не из CORS появляется. Может быть ошибка Error: Response is not valid JSON object. связана с версией NodeJs используемой в проекте?
Что за Response?
Думаю, это ответ на запрос с моей стороны на сервер. Происходит выборка данных и возвращается назад ответ. В доке написан пример с использованием v2/https. Я использую "firebase-functions": "^3.3.0" Может из-за различий версий function возвращаться ошибка?
А что в стектрейсе?
Код ваш можете показать?
вы локализовали место ошибки?
К сожалению, нет. Поэтому и поинтересовался на счет запуска вне билда, дабы найти место сбоя.
Ошибка описанная мною ранее. А именно Error: Response is not valid JSON object.
Стектрейс?
Добрый день. В продолжении разговора, Source maps включить в браузере или указать параметр при сборке проекта?
Там где ошибка.
Причина ошибки известна. const refTime = FN.httpsCallable('getTimeStamp') const { timestamp } = await refTime().then(res => res.data) В первой строчке Promise Во второй строчке ошибка getTimeStamp имя функции exports.getTimeStamp = functions.https.onCall(function () { return new Promise(function (resolve) { resolve({ timestamp: Date.now() }); }); }); Настройки export const FN = firebase.functions() FN.useFunctionsEmulator(":5001") export const DB = firebase.database() export const FS = firebase.firestore() export const STOR = firebase.storage()
При вызове getTimeStamp, с использование эмулятора функции, стучится по адресу http://127.0.0.1:5000/:5001/MY_NAME_PROJECT/us-central1/getTimeStamp В мое представлении он должен был иди по адресу http://127.0.0.1:5001/getTimeStamp Без использования эмулятора функции, стучится по адресу https://us-central1-MY_NAME_PROJECT.cloudfunctions.net/getTimeStamp И выдает CORS Ошибку
Надо подключать эмуляторы в приложении.
Если, к примеру, пишу так firebase.database().useEmulator("127.0.0.1", 9000); firebase.database().useFunctionsEmulator("127.0.0.1", 9000); пишет что такой функции нет database(...).useEmulator is not a function database(...).useFunctionsEmulator is not a function
У вас скорее всего 9 версия. Поэтому, примеры нужно смотреть от модульного веб API. https://firebase.google.com/docs/emulator-suite/connect_functions
Добрый день. В продолжении темы развертывания эмулятора. Прописал import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions";
Добрый день. В продолжении темы развертывания эмулятора. Прописал import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; console.log(getApp) console.log( getFunctions) в обоих console выдает undefined В связи с этим вопрос. У меня "скорее всего 9 версия" чего? У меня 8 версия nodejs В package.json прописан firebase: 5.8.2
В проекте, где определяются только функции
9 версия чего нужна?
Пакета firebase.
Что у вас за проект?
Мне кажется с такими старыми версиями эмулятор использовать не получится. На 9 так просто переключиться тоже не получиться. У вас сейчас Web namespaced API.
В одном проекте два под проекта. Один клиент, второй functions.
Для использования эмулятора скорее всего придется обновляться до последних версий библиотек.
С 9 версии firebase можно пользоваться уже namespace API?
До 9 можно только.
Может до 9 можно web MODULAR api? А начиная с 9 NAMESPACE?
Модульный — новый, другой — старый.
если namespace более ранняя, то с начиная с какой версии доступная функция useEmulator на firestore?
Добрый день. В продолжение темы CORS. На сервере firebase возникает ошибка как на изображении приложенном. Из названия доменов делаю вывод, что не может клиент достучатся до cloud-functions. Насколько помню, права на функции давал максимальные для всех.
Исходя из этого сообщения, делаю вывод, что для функций cors не нужен. Кроме как советов о настройки CORS и выдача прав на функции в инете и в текущем канале толком больше ничего не нашел. Имеются ли предположения или решения текущей ошибки? Спасибо.
Это onCall функция?
Такое может случиться, если например имя функции неправильно написать.
Это логи браузера?
Это из консоли браузера при загрузке страницы
Да, functions.https.onCall(function () { return new Promise(function (resolve) {
До этого 2 года работало без ошибок. Никто не прикасался к проекту. С недавних пор так произошло.
Неправильно написать имя функции при ее вызове?
А есть что в логах функций? https://console.cloud.google.com/logs
Да. Или регион.
Billing disabled. Shutting down instance.
В чем могут быть сложности в переключении на module? Надо будет значительную кодовую базу менять?
В 9 версии вроде бы есть compat версия библиотеки. Сначала импорты на неё меняют, а потом остальное.
Обсуждают сегодня