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

TypeORM报Connection "default"未找到 无法向数据库发送请求

错误原因

当前使用的TypeORM 0.3+版本已移除全局默认连接自动注册逻辑,getRepository()这类全局方法不再能直接获取到你手动初始化的AppDataSource实例,因此抛出Connection "default" was not found错误。
你可以正常创建数据表是因为AppDataSource.initialize()本身执行成功,仅控制器层获取仓储的方式不符合新版本规范。

修复方案

方案1:通过自定义DataSource实例获取仓储(官方推荐)

直接引入你提前导出的AppDataSource实例,调用实例上的getRepository方法即可,完全不依赖全局连接,多数据源场景下也不会出现连接混淆问题。
修改控制器层代码如下:

import { Request, Response } from "express";
// 移除原typeorm包的getRepository引入,替换为引入自定义的数据源实例
import { AppDataSource } from "../database/Config";
import { User } from "../entities/User";

class UserController {
    async store(req: Request, res: Response) {
        // 从已初始化的数据源实例获取User表仓储
        const repository = AppDataSource.getRepository(User);
        const { email, username, password } = req.body;

        const userExists = await repository.findOne({ where: { email } });

        if (userExists) {
            return res.status(409).json('User already exists');
        }

        const user = repository.create({ email, username, password });
        await repository.save(user);

        return res.status(200).json(user);
    }
}

export default new UserController();

方案2:兼容旧版全局调用写法(不推荐)

如果需要兼容项目中大量getRepository的旧写法,可以在数据源初始化完成后手动将其注册为全局默认连接,该方案仅作过渡使用,后续TypeORM版本可能完全移除全局连接相关API。
在数据库配置的new DataSource参数中增加name: "default"字段即可。

注意事项
  • 现有启动逻辑先初始化数据库再启动HTTP服务的写法是正确的,不会出现请求到达时数据库未完成连接的问题。
  • 配置中的synchronize: true仅适用于开发环境,生产环境必须关闭,否则可能触发自动表结构修改导致数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:09:19