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

如何在Express Generator生成的ExpressJS项目中使用TypeORM?

在Express Generator项目中集成TypeORM的完整解决方案

看起来你遇到的问题是TypeORM默认连接没有正确初始化,导致路由调用时找不到连接。我来一步步帮你解决这个问题:

1. 确认依赖安装与基础配置

首先确保你已经安装了TypeORM所需的所有依赖:

npm install typeorm reflect-metadata mysql2 # 把mysql2换成你实际使用的数据库驱动,比如pg、sqlite3等

然后在项目根目录创建ormconfig.json配置文件,这是TypeORM的核心配置,示例如下(根据你的数据库修改):

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "你的数据库用户名",
  "password": "你的数据库密码",
  "database": "你的数据库名",
  "entities": ["src/entities/**/*.js"], // 如果是TS项目就改成*.ts,确保路径匹配你的实体文件
  "migrations": ["src/migrations/**/*.js"],
  "cli": {
    "entitiesDir": "src/entities",
    "migrationsDir": "src/migrations"
  },
  "synchronize": true // 开发环境可以开启,生产环境建议关闭,用迁移来管理表结构
}

2. 修正/bin/www的连接逻辑

你之前的代码思路是对的,但漏掉了关键一步:导入reflect-metadata,TypeORM的装饰器依赖它才能正常工作。另外要确保连接成功后再启动服务器,并且处理连接失败的情况:

修改/bin/www文件的顶部:

// 必须放在最前面,确保TypeORM能正常使用装饰器
require('reflect-metadata');
const typeorm = require('typeorm');
const http = require('http');
const app = require('../app');
const debug = require('debug')('your-project-name:server');

然后替换原有的服务器启动逻辑为:

// 先建立TypeORM连接,再启动服务器
typeorm.createConnection()
  .then((connection) => {
    console.log('✅ TypeORM 默认连接已成功建立');
    
    // 创建HTTP服务器
    const server = http.createServer(app);
    const port = normalizePort(process.env.PORT || '3000');
    app.set('port', port);

    server.listen(port);
    server.on('error', onError);
    server.on('listening', onListening);
  })
  .catch(err => {
    console.error('❌ TypeORM 连接失败:', err);
    process.exit(1); // 连接失败直接退出进程,避免后续错误
  });

3. 在路由中正确使用TypeORM

现在连接已经在服务器启动前初始化完成,你可以在路由中安全地使用TypeORM了。比如创建一个用户路由/routes/users.js:

const express = require('express');
const router = express.Router();
const typeorm = require('typeorm');
const User = require('../entities/User'); // 导入你的实体类

router.get('/', async (req, res) => {
  try {
    // 获取默认连接的Repository
    const userRepo = typeorm.getRepository(User);
    const users = await userRepo.find();
    res.json(users);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

module.exports = router;

常见问题排查

  • 如果还是提示“default connection was not found”,检查ormconfig.json的路径是否正确,确保它在项目根目录,并且entities路径能匹配到你的实体文件。
  • 实体类必须使用TypeORM的装饰器(比如@Entity()),否则TypeORM无法识别。
  • 如果是TypeScript项目,需要在tsconfig.json中开启以下配置:
    {
      "compilerOptions": {
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true
      }
    }
    

这样应该就能解决你的问题了,确保每一步都配置正确,连接建立后再启动服务器是关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:41