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

TypeORM 0.3.20升级:替换createConnection为DataSource遇阻,表未生成

完整修改方案(TypeORM 0.3.20 + Fastify)

1. 修复数据源初始化代码(/decorators/db.ts)

核心问题是你创建了DataSource但未调用initialize()方法,且未正确读取环境变量配置。替换为以下完整代码:

import fp from "fastify-plugin";
import { DataSource } from "typeorm";
import { Memo } from "../modules/memo/entity";

export default fp(async (fastify) => {
  try {
    // 从.env读取数据库配置,与你的环境变量对应
    const dataSource = new DataSource({
      type: "postgres",
      host: process.env.TYPEORM_HOST,
      port: parseInt(process.env.TYPEORM_PORT || "5432"),
      username: process.env.TYPEORM_USERNAME,
      password: process.env.TYPEORM_PASSWORD,
      database: process.env.TYPEORM_DATABASE,
      // 开发环境自动同步实体到数据库(生产环境建议用迁移)
      synchronize: process.env.TYPEORM_SYNCHRONIZE === "true",
      // 直接引入实体类,避免路径匹配的潜在问题
      entities: [Memo],
      // 若要保留路径匹配,需确保路径正确(开发用src/,构建后用dist/)
      // entities: [process.env.TYPEORM_ENTITIES || "src/modules/*/entity.ts"],
    });

    // 关键步骤:初始化数据源,这一步才会连接数据库并生成表
    await dataSource.initialize();
    console.log("数据库连接成功,实体同步完成");

    // 给Fastify挂载数据库仓库
    fastify.decorate("db", {
      memo: dataSource.getRepository(Memo),
    });

    // 服务器关闭时自动释放数据源连接
    fastify.addHook("onClose", async () => {
      await dataSource.destroy();
    });
  } catch (error) {
    console.error("数据库连接失败:", error);
    throw error; // 抛出错误终止服务,避免无效运行
  }
});

2. 确保环境变量正确加载

如果项目未配置dotenv,需在index.ts顶部添加环境变量加载逻辑:

import dotenv from "dotenv";
dotenv.config();

未安装dotenv的话先执行:npm install dotenv --save

3. 验证实体与配置

  • 你的Memo实体代码无问题,@Entity()未指定表名时,会自动以类名小写生成表(即memo)
  • 确认.env中TYPEORM_SYNCHRONIZE=true已正确设置,该开关控制实体同步到数据库的行为

4. 问题根源说明

  • 未调用dataSource.initialize():DataSource创建后必须初始化才会执行数据库连接和表同步
  • 环境变量未正确加载:导致数据库配置失效或synchronize未开启
  • 旧APIgetConnectionOptions()已废弃,无法适配新的DataSource体系

测试步骤

  1. 安装依赖(若未装dotenv):npm install dotenv
  2. 修改代码后重启服务:npm start
  3. 查看控制台输出,确认出现"数据库连接成功,实体同步完成"
  4. 进入PostgreSQL数据库,执行SELECT * FROM memo;验证表是否生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:15:29