首页 > 解决方案 > Vue + Firebase:函数 useEmulator() 被忽略

问题描述

我在Firebase 文档 中发现了这行代码,firebase.functions().useEmulator('localhost', 5001)它应该将您的 Vue 应用程序指向本地运行的模拟器,但由于某种原因,我的项目忽略了所述代码行,而是继续调用远程部署的函数。

这是我的相关部分的@/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 函数,我将在 Vuex 操作中运行以下命令:

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

我究竟做错了什么?如何让它正确指向我本地运行的模拟器?

Vue 项目版本:

函数项目版本:

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

标签: javascriptfirebasevue.jsgoogle-cloud-functionsfirebase-tools

解决方案


这一行:

firebase.functions()

功能上等同于

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

在您当前的代码中,您将未指定区域的函数连接到模拟器。因为您europe-west2在使用它时指定了区域,所以您需要将europe-west2函数连接到模拟器。您可以通过更改此行来做到这一点:

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

使用正确的区域:

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

附加说明:虽然firebase.functions()firebase.app().functions()返回相同的Functions对象实例(连接到us-central1区域),但firebase.app().functions('us-central1')(您在区域中传递)返回不同的实例Functions。您需要将您使用的每个实例连接到模拟器。


推荐阅读