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

使用Firebase实时数据库set函数时出现db._checkNotDeleted错误

解决@firebase/database调用set时的TypeError错误

错误信息

Reference_impl.ts:482 Uncaught (in promise) TypeError: db._checkNotDeleted is not a function
    at ref (Reference_impl.ts:482:6)
    at HTMLInputElement.keypress_handler (__layout.svelte:85:25)
ref @   Reference_impl.ts:482
keypress_handler    @   __layout.svelte:85

问题代码

import { get, ref, set } from '@firebase/database';

// ...

let updates = {};

let chatID = [fb.auth.currentUser.uid, userID].sort().join('-');

let users = {};

users[fb.auth.currentUser.uid] = true;
users[userID] = true;

let chat = {
    type: 'direct',
    users: users,
    id: chatID,
    timestamp: Date.now()
};

updates['/chats/' + chatID] = chat;

updates['/users/' + fb.auth.currentUser.uid + '/chats/' + chatID] = true;
updates['/users/' + userID + '/chats/' + chatID] = true;

return await set(ref(fb.db), updates);

原因分析

这个错误的核心是传入ref()的fb.db不是有效的Firebase Realtime Database实例,大概率是初始化脚本里的问题:

  • 误用了Firestore的初始化方法(比如getFirestore())而非Realtime Database的getDatabase()
  • 初始化脚本未正确导出数据库实例

解决方案

1. 修正Firebase初始化脚本

确保你的fb脚本正确初始化并导出Realtime Database实例:

// fb.js 示例代码
import { initializeApp } from 'firebase/app';
import { getDatabase } from 'firebase/database';
import { getAuth } from 'firebase/auth';

// 你的Firebase配置
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  databaseURL: "YOUR_DATABASE_URL", // Realtime Database的URL必须配置
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID"
};

const app = initializeApp(firebaseConfig);
// 正确获取Realtime Database实例
export const db = getDatabase(app);
export const auth = getAuth(app);

2. 替换set为update(逻辑优化)

你的代码是批量更新多个路径,用update()才是正确的API(set()会覆盖整个根节点,导致数据丢失):

// 先导入update
import { get, ref, update } from '@firebase/database';

// ...

// 最后一行替换为
return await update(ref(fb.db), updates);

3. 增加用户登录状态校验

避免currentUser为null时出错:

const currentUser = fb.auth.currentUser;
if (!currentUser) {
  throw new Error('用户未登录,无法创建聊天');
}

let chatID = [currentUser.uid, userID].sort().join('-');
users[currentUser.uid] = true;
updates['/users/' + currentUser.uid + '/chats/' + chatID] = true;

内容的提问来源于stack exchange,提问作者Penguin Master

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:27:07