javascript - 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 项目版本:
- Vue:2.6.11
- 火力基地: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)
附加说明:虽然firebase.functions()
和firebase.app().functions()
返回相同的Functions
对象实例(连接到us-central1
区域),但firebase.app().functions('us-central1')
(您在区域中传递)返回不同的实例Functions
。您需要将您使用的每个实例连接到模拟器。
推荐阅读
- uml - 一个活动图中可以有多个用户
- angular - 无法绑定到“name”,因为它不是“i”的已知属性
- c# - 线程.睡眠(-1)
- r - 在 R 中写入 csv 文件时的分隔符
- betfair - Betfair, 如何通过 Betfairs api 检索 MATCH_ODDS, price , inplay
- sql - 在 SQL Server 中应用以 R 计算的 SARIMA 方程
- javascript - 防止光标在旋转元素时进入某个区域?
- python - 在 SymPy 中一次求解非线性方程组和不等式系统
- authentication - 如何在没有企业的情况下保护 DC/OS 上的 HDFS
- php - jquery如何在不刷新页面的情况下发布到数组