You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js环境中查看Firebase数据库的连接/断开状态?

正确实现方式

首先确保你已经安装必要依赖:

npm install firebase-admin chalk

然后重构Firebase操作类,调整初始化流程、错误处理和连接状态验证逻辑:

const { initializeApp, cert, getFirestore } = require('firebase-admin');
const chalk = require('chalk');
const firebaseConfig = require('./config.json'); // 你的配置文件路径

class Firebase {
    constructor(client) {
        this.client = client;
        this.app = null;
        this.db = null;
        this.isConnected = false;
        // 触发数据库初始化
        this.init();
    }

    async init() {
        try {
            // 先校验配置完整性
            if (!firebaseConfig?.credential || !firebaseConfig?.databaseURL) {
                throw new Error('配置不完整:config.json中必须包含[credential]和[databaseURL]');
            }

            console.info(chalk.cyan('Firebase: 正在尝试连接数据库...'));
            
            // 初始化Firebase应用
            this.app = initializeApp({
                credential: cert(firebaseConfig.credential),
                databaseURL: firebaseConfig.databaseURL
            });
            
            // 获取Firestore实例
            this.db = getFirestore(this.app);

            // 执行轻量查询验证连接有效性(避免仅初始化成功但实际无法访问数据库)
            await this.db.collection('__connection_check__').doc('test').get();
            
            this.isConnected = true;
            console.info(chalk.green('Firebase: 数据库连接成功'));
        } catch (err) {
            this.isConnected = false;
            console.error(chalk.red(`Firebase: 数据库连接失败 - ${err.message}`));
            // 若需要强制机器人启动失败,可取消下方注释
            // throw err;
        }
    }

    // 你的set方法示例
    async set(collection, docId, data) {
        if (!this.isConnected) {
            throw new Error('数据库未连接,无法执行操作');
        }
        try {
            await this.db.collection(collection).doc(docId).set(data);
            return true;
        } catch (err) {
            console.error(chalk.red(`Firebase set操作失败: ${err.message}`));
            return false;
        }
    }

    // 你的get、delete方法可参考上述格式实现...
}

module.exports = Firebase;

关键改进点:

  • 流程优化:先校验配置再输出连接日志,避免无效提示
  • 真实连接验证:通过轻量数据库查询确认连接可用性,而非仅依赖初始化成功
  • 状态追踪:新增isConnected属性,方便后续操作前检查连接状态
  • 错误处理:捕获错误后输出清晰日志,可选择是否终止机器人启动
  • 颜色日志规范:使用chalk包提供标准的彩色日志输出(确保已正确导入)

在discord.js中使用示例:

const { Client, GatewayIntentBits } = require('discord.js');
const Firebase = require('./Firebase');
const chalk = require('chalk');

const client = new Client({ intents: [GatewayIntentBits.Guilds] });
const db = new Firebase(client);

client.on('ready', () => {
    console.log(`Discord机器人已登录:${client.user.tag}`);
    console.log(`Firebase连接状态:${db.isConnected ? chalk.green('已连接') : chalk.red('未连接')}`);
});

client.login('你的机器人Token');

内容的提问来源于stack exchange,提问作者Hi 1999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:50:33