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

SvelteKit集成MongoDB出现ReferenceError: global is not defined错误如何解决

错误原因

mongodb是专为Node.js服务端环境设计的依赖包,其内部代码依赖Node.js专属全局变量global。而SvelteKit默认会对所有导入的依赖做同构构建,也就是同时打包服务端和客户端两份代码,浏览器客户端环境不存在global变量,因此只要该工具文件被客户端代码引用,就会触发你遇到的报错,和服务端逻辑本身无关。

解决办法
  • 第一步:修改数据库工具文件的命名,将database.js重命名为database.server.js,SvelteKit约定带.server.js后缀的文件仅会被打包到服务端,不会输出到客户端代码中,从根源上避免客户端加载mongodb相关代码。
  • 第二步:修正代码中的变量错误,原代码中存在两处变量未定义的问题,会导致后续运行报错,修正后的核心代码如下:
// src/lib/database.server.js
import { ENV_OBJ } from "$lib/env";
import { MongoClient } from "mongodb";

const uri = ENV_OBJ.MONGODB_URI;
const dbName = ENV_OBJ.MONGODB_DB;

if (!uri) {
    throw new Error("Please define the Mongodb uri environment variable inside .env");
}
if (!dbName) {
    throw new Error("Please define the Mongodb db name environment variable inside .env");
}

/**
 * Global is used here to maintain a cached connection across hot reloads
 * in development. This prevents connections growing exponentially
 * during API Route usage.
 */
let cached = globalThis.mongo

if (!cached) {
    cached = globalThis.mongo = { conn: null, promise: null }
}

export const connectToDatabase = async() => {
    if (cached.conn) {
        return cached.conn;
    }

    if (!cached.promise) {
        const options = {
            useNewUrlParser: true,
            useUnifiedTopology: true
        };

        cached.promise = MongoClient.connect(uri, options).then((client) => {
            return {
                client,
                db: client.db(dbName),
            }
        })
    }
    cached.conn = await cached.promise;
    return cached.conn;
}
  • 第三步:确保仅在服务端逻辑中导入该工具,比如仅在API路由、+page.server.js/+layout.server.js这类服务端专属文件中调用connectToDatabase,不要在普通.svelte组件、客户端js文件中导入该工具。
关于global.d.ts的说明

该文件是TypeScript全局类型声明文件,其中的代码仅用于给编辑器、TS类型检查器提供SvelteKit的全局类型提示,和本次运行时报错无关,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:03