Я начинаю свой проект с node.js и базой данных Firebase в реальном времени, который разрабатывает REST API. Я изо всех сил пытался подключиться и отправить данные в firebase. Поскольку я намереваюсь использовать структуру MVC, я планирую выделить свою модель, как показано в файле user.js ниже. Взгляните на мой код:
/* user.js */
function User (id, firstName, lastName) {
this.id = id;
this.firstName = firstName;
this.lastName= lastName;
}
const config = {
apiKey: "....",
authDomain: "....",
databaseURL: "....",
projectId: "....",
storageBucket: "....",
messagingSenderId: "...."
}
const firebase = require('firebase');
firebase.initializeApp(config);
const database = firebase.database();
const userRef = database.ref('/users');
User.prototype.post = () => {
console.info(this.id);
//just to test whether the database is connected
//ref: https://firebase.google.com/docs/database/web/offline-capabilities
userRef.on("value", function(snap) {
if (snap.val() === true) {
console.info("connected");
} else {
console.info("not connected");
}
});
userRef.child(this.id).set({
firstName: this.firstName,
lastName: this.lastName
});
}
module.exports = User;
/* index.js */
const User = require('./user')
const express = require('express');
const app = express();
app.use(express.json());
app.get('/users', (req, res) => {
const {id, firstName, lastName} = req.body;
const user = new User (id, firstName, lastName);
//console.info(user);
user.post();
res.send("Success!");
}
const port = 3000;
app.listen(port, () => console.info(`Listening on port ${port}`));
Когда я пытаюсь отправить запрос POST, данные не отправляются в базу данных firebase. Я также получаю "not connected" для кода, который проверяет, подключена ли база данных (см. user.js). Может ли кто-нибудь указать мне, где я ошибаюсь? Любая помощь будет принята с благодарностью.
P.S: Я должен упомянуть, что когда я пытаюсь сделать все в одном файле index.js, это работает нормально. Однако хочу выделить модель user.js.
Если userRef.on("value", function(snap) { выполняет обратный вызов, это означает, что ваш клиент действительно подключен к базе данных, несмотря на то, что вы регистрируете, что это не так. Если вы записываете значение с помощью userRef..set(true); сразу после on("value", оно работает?
@FrankvanPuffelen Это сработало - мне удалось установить значение True в базе данных. Спасибо за это! Когда я пытался использовать console.info(this.id) или (this.firstName), я получал undefined. Я подозреваю, что это проблема. Есть идеи, как я могу это решить?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы вызываете базу данных реального времени непосредственно со своего сервера, то есть «из привилегированной среды», вам лучше использовать Admin SDK, см. firebase.google.com/docs/database/admin/start