Окружающая среда
В firebase.json установлен следующий конфиг:
{
"functions": { "source": ".output/server" }
}
У меня есть файл в каталоге «сервер», содержащий следующую функцию:
import * as functions from "firebase-functions";
export const helloWorld = functions.https.onRequest((request, response) => {
functions.logger.info("Hello logs!", {structuredData: true});
response.send("Hello from Firebase!");
});
Когда я бегу:
NITRO_PRESET=firebase npm run build
firebase emulators:start --only functions
затем перейдите в мой журнал эмулятора firebase, он не показывает инициализацию новой функции helloWorld()
. Кроме того, при переходе на «http://localhost:5001/$PROJECTNAME/us-central1/helloWorld» возвращается «Функция us-central1-helloWorld не существует, допустимые функции: us-central1-server», что предполагает, что моя функция не была инициализирована.
Есть ли способ написать облачные функции Firebase в моем приложении Nuxt 3 из файлов в каталоге моего сервера?
Я видел похожее обсуждение здесь, в котором говорилось, что можно изменить объект nuxt.config.ts functions
между функциями развертывания, хранилищем, firestore и развертыванием сервера и хостинга. Я пытаюсь писать функции firebase исключительно в каталоге «сервер», не создавая каталог «функции» и корень моего проекта. Это возможно?
Я также открыл обсуждение на GitHub здесь.
К сожалению, процедура, которой вы следуете, имеет некоторые моменты, на которые следует обратить внимание. Как упоминалось ранее в этом нить:
The Vue.js app is a front-end component (even if it is hosted in a cloud service like Firebase Hosting). The Cloud Functions are serverless back-end components, hosted in the Firebase (Google Cloud) infrastructure and reacting to events.
To get these two components interacting with each other there are basically two possibilities:
- For Callable Cloud Functions and HTTPS Cloud Functions, you will call them from your Vue.js app.
- For background triggered Cloud Functions (e.g. triggered by a Firestore event like doc creation), the Vue.js front-end could generate the event (e.g. write to Firestore) and/or listen to the result of a Cloud Function execution (e.g. a Firestore doc is modified).
…
As explained in the documentation, to call the Callable Function from your Vue.js app, you need to do as follows (with the JS SDK v9):
Add Firebase to your Vue.js app. For example via a firebaseConfig.js file:
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; import { getFunctions } from "firebase/functions"; const firebaseConfig = { apiKey: "...", // .... }; const firebaseApp = initializeApp(firebaseConfig); const db = getFirestore(firebaseApp); const functions = getFunctions(firebaseApp); export { db, functions };
Then, in your component, you do
<script> import { functions } from '../firebaseConfig'; import { httpsCallable } from 'firebase/functions'; // ... methods: { async callFunction() { const addMessage = httpsCallable(functions, 'addMessage'); const result = await addMessage({ text: messageText }) const data = result.data; //... }); } </script>
Я также попытался воспроизвести проблему и успешно развернул функции на эмуляторе с тем же подходом, что и в вопросе, следуя документации GCP о том, как добавить Firebase для вашего проекта, и используя этот Учебник по ютубу в качестве руководства, в нем есть несколько важных советов по как добавить Firebase в проект NuxtJS.
Я оставлю пример того, как мой файл firebase.json
выглядел после того, как все настройки были завершены:
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint"
],
"source": ".output/server"
},
"hosting": {
"site": "<your_project_id>",
"public": ".output/public",
"cleanUrls": true,
"rewrites": [{ "source": "**", "function": "server" }],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Кроме того, я хотел бы предложить использовать Интерфейс командной строки Firebase, так как он имеет больше специальных возможностей, и проверить этот Средний гид, чтобы более подробно изучить, как добавить Firebase в Nuxt.
Да, все правильно, и ответ тоже об этом говорит. Не могли бы вы уточнить? Мой ответ объясняет, как развернуть облачные функции с использованием Nuxt 3 в качестве внешнего интерфейса, и я также смог применить приложение через сервер Nitro.
Там нечего уточнять. Пример, который вы написали, работает только как открытый API для всех, если мы говорим о видео. Он хочет иметь возможность аутентифицировать пользователей и выполнять действия в базе данных. Ему нужно использовать firebase-functions и firebase-admin SDK.
Да, и это возможно. Ему просто нужно следовать моему ответу.
Итак, покажите нам, как он может аутентифицировать внешние HTTP-вызовы.
Я не думаю, что это главный вопрос пользователя, но если у вас есть что добавить, вы можете опубликовать это как комментарий или ответ.
Он хочет использовать nuxt3 в качестве внешнего сервера. Он хочет использовать такие библиотеки, как SDK firebase-functions и SDK firebase-admin. Эти библиотеки работают в среде узла.