Firebase 模拟器对本地 FireStore 的请求不成功

Firebase Emulators Requests to local FireStore unsuccessful

Firebase 模拟器对本地 FireStore 的请求不成功

您好,

我正在尝试设置 Firebase 模拟器,但我的应用程序仍在连接到 Firebase(web)。当我执行 db.collection("users").add() 时,我看到 https://console.firebase.google.com 上的条目不在 http://localhost:4000/firestore 上(主机端口为 8080,查看器端口为 4000 )

这是我到目前为止所做的:

  1. Firebase emulators:start returns“所有模拟器都准备好了!”

  2. Firebase.json 看起来不错(端口看起来不错)

"emulators": {
    "functions": {
      "port": 5001
    },
    "firestore": {
      "port": 8080
    },
    "database": {
      "port": 9000
    },
    "hosting": {
      "port": 5000
    },
    "pubsub": {
      "port": 8085
    },
    "ui": {
      "enabled": true
}
  1. 在初始化应用程序之前,我将 databaseURL 更改为我的本地 firestore。 请注意,在视频“本地 Firebase 模拟器 UI 15 分钟”(https://www.youtube.com/watch?v=pkgvFNPdiEs 5:19)中,David East 将整个配置对象替换为“config = { databaseURL: '...' }”,但它 returns 这个错误:“Uncaught FirebaseError: firebase.initializeApp 中未提供“projectId””,如果我添加值键 projectId,它 returns 会丢失其他错误。
if (location.hostname === "localhost") {
  config.databaseURL = "http://localhost:8080?ns=project_name";
}

firebase.initializeApp(config);
  1. Firebase 使用好项目 ()
firebase use project_name
  1. 我还创建了 Google Cloud Platform 私钥...以防万一。

我想我的问题可能出在第 3 步,但我找不到解决方法。你有什么想法吗?你做了什么让它发挥作用?

谢谢!

你已经完成了大部分内容,但我认为自视频制作以来连接到本地数据库模拟器的方法已经改变。

我使用以下方法成功连接到我的本地数据库模拟器:

if (!firebase.apps.length) {
  let config = {
    apiKey: "-------------------",
    authDomain: "--------------",
    databaseURL: "------------------",
    projectId: "----------------",
    storageBucket: "---------------------",
    messagingSenderId: "--------------",
    appId: "----------------------",
    measurementId: "-----------------"
  };

  firebase.initializeApp(config);

  if (location.hostname === "localhost") {
    var db = firebase.firestore();
    db.settings({
      host: "localhost:8080",
      ssl: false
    });
  }
}

在线连接的原始配置保留在原位,但如果 location.hostname === "localhost",则进行适当的更改。

firebase.initializeApp(config) 需要在检测应用本地 运行 的 if 语句之上。

幸运的是,该应用程序继续使用在线身份验证,并且数据库和函数连接是本地的。

最新的文档在这里:https://firebase.google.com/docs/emulator-suite/connect_and_prototype