簡體   English   中英

Vue + Firebase:函數 useEmulator() 被忽略

[英]Vue + Firebase: Functions useEmulator() ignored

我在Firebase 文檔firebase.functions().useEmulator('localhost', 5001)中找到了這行代碼,據說它會將你的 Vue 應用程序指向本地運行的模擬器,但由於某種原因,我的項目忽略了這行代碼並繼續改為調用遠程部署的 function。

這是我的@/plugins/firebase.js的相關部分的樣子:

import firebase from 'firebase/app';
import 'firebase/functions';

firebase.initializeApp({
  apiKey: process.env.VUE_APP_FIREBASE_API_KEY,
  authDomain: process.env.VUE_APP_FIREBASE_AUTH_DOMAIN,
  databaseURL: process.env.VUE_APP_FIREBASE_DATABASE_URL,
  projectId: process.env.VUE_APP_FIREBASE_PROJECT_ID,
  storageBucket: process.env.VUE_APP_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.VUE_APP_FIREBASE_MESSAGE_SENDER_ID,
  appId: process.env.VUE_APP_FIREBASE_APP_ID,
  measurementId: process.env.VUE_APP_FIREBASE_MEASUREMENT_ID
});

firebase.functions().useEmulator('localhost', 5001);
const func = {
  botcheck: firebase.app().functions('europe-west2').httpsCallable('validateRecaptcha'),
};

export { func };

然后調用 botcheck function,我將在 Vuex 操作中運行以下命令:

const fb = require('@/plugins/firebase');
...
await fb.func.botcheck();

我究竟做錯了什么? 如何讓它正確指向我本地運行的模擬器?

Vue 項目版本:

  • Vue:2.6.11
  • firebase:8.3.2

函數項目版本:

  • 火力基地管理員:9.2.0
  • firebase 功能:3.11.0

讓我知道是否需要包含其他信息。

這一行:

firebase.functions()

功能上等同於

firebase.app().functions('us-central1')

在您當前的代碼中,您將未指定區域的函數連接到模擬器。 因為在使用時指定區域為europe-west2 ,所以需要將europe-west2函數連接到模擬器。 您可以通過更改此行來做到這一點:

firebase.functions().useEmulator('localhost', 5001);

使用正確的區域:

firebase.app().functions('europe-west2').useEmulator('localhost', 5001)

Additional Note: While firebase.functions() and firebase.app().functions() return the same instance of a Functions object (connected to the us-central1 region), firebase.app().functions('us-central1') (您在該區域中傳遞的位置)返回Functions的不同實例。 您需要將您使用的每個實例連接到模擬器。

這是您的代碼,因為我確保使用 Firebase 模擬器的 Cloud Functions 正確配置了useEmulator() 隨意嘗試:

import firebase from 'firebase/app';
import 'firebase/functions';

const firebaseConfig = {
 // Your config
};

const app = firebase.initializeApp(firebaseConfig);
const functions = app.functions('europe-west2');

functions.useEmulator('localhost', 5001);

const func = {
  botcheck: functions.httpsCallable('validateRecaptcha'),
};

export { func };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM