如何在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
相关产品推荐
相关产品推荐

