这是indexloc提供的服务,不要输入任何密码
Skip to content

Hosting emulator uses a different RTDB instance from Functions and Database emulators. #2965

@bkeil

Description

@bkeil

[REQUIRED] Environment info

firebase-tools:
9.1.0

Platform: Raspbian
Linux raspberrypi 5.4.79-v7l+

[REQUIRED] Test case

functions/index.js

const functions = require('firebase-functions');
const admin = require("firebase-admin");

admin.initializeApp();

exports.addMessage = functions.https.onRequest(async (req, res) => {
    const original = req.query.text;
    const messageRef = await admin.database().ref('/messages').push();
    await messageRef.set({original: original});
    res.json({result: `Message with ID: ${messageRef.key} added.`});
  });

public/index.html
database-debug.log
firebase-debug.log
pubsub-debug.log
ui-debug.log

<html>
<head>
  <meta charset="utf-8">
  <title>DB Instance Name Bug</title>
  <script defer src="/__/firebase/8.2.1/firebase-app.js"></script>
  <script defer src="/__/firebase/8.2.1/firebase-database.js"></script>
  <script defer src="/__/firebase/init.js?useEmulator=true"></script>
</head>

<body>
  <script>
    document.addEventListener('DOMContentLoaded', function () {
      firebase.database().ref('/messages').once('value').then(
        (snapshot) => console.log(snapshot.val()),
        (error) => console.log(error)
      );
    });
  </script>
</body>
</html>

[REQUIRED] Steps to reproduce

  1. Create a new project in the Firebase console.
  2. Make a new local directory for the project with firebase init.
    A. Select the project from (1).
    B. Select database, hosting, emulators.
    C. Accept all defaults.
  3. Create public/index.html and functions/index.js as above
  4. Run firebase emulators:start
  5. Invoke the addMessage function: curl http://localhost:5001/*project-id*/us-central1/addMessage?text=test
  6. Load the hosted website: http://localhost:5000/

[REQUIRED] Expected behavior

All three emulators, Functions, Database, and Hosting should all refer to the same instance.

When the page is loaded in (6), an object with the message from (5) should be logged to the console.

I have verified that this project works as intended when deployed to production.

[REQUIRED] Actual behavior

The Functions emulator and the Database emulator both use http://localhost:9000?ns=*project-id*, but the Hosting emulator connects to ws://localhost:9000/.ws?v=5&ns=project-id-default-rtdb

The Hosting emulator uses a database with the "-default-rtdb" suffix, while the other two emulators do not use that suffix.

When the page is loaded in (6), a "null" is logged to the console.

After loading the page, the database emulator shows two databases, one with and one without the "-default-rtdb" suffix.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions