Node+GraphQL项目中TypeORM的createConnection已弃用问题咨询
TypeORM中
createConnection被标记为弃用的原因及影响分析 一、弃用原因
TypeORM从0.3.x版本开始,将createConnection标记为弃用,转而推荐使用DataSource API,核心原因是旧API存在设计层面的不足:
- 全局连接管理逻辑容易在多数据库场景下产生混乱,耦合度高
- 类型系统不够严谨,配置与连接实例的边界模糊
- 新的
DataSource采用模块化设计,支持更灵活的连接生命周期管理、异步初始化,同时提供更完善的TypeScript类型支持
二、对代码运行的影响
- 短期无直接影响:0.3.x版本保留了
createConnection的兼容层,现有代码仍能正常编译、运行,不会直接报错 - 长期存在风险:官方会逐步移除该API,未来版本中
createConnection可能被彻底删除,届时代码将无法正常工作 - 维护隐患:弃用的API不再接收bug修复和性能优化,后续遇到相关问题官方不会提供技术支持
三、替代方案(迁移到DataSource)
将原有代码替换为DataSource的示例如下:
import 'reflect-metadata'; const express = require('express'); import { Express } from 'express'; import { ApolloServer } from 'apollo-server-express'; import { ApolloServerPluginLandingPageGraphQLPlayground } from 'apollo-server-core'; import { buildSchema } from 'type-graphql'; import { ActivityResolver } from './resolvers/activity'; // 替换导入为DataSource import { DataSource } from 'typeorm'; const main = async () => { // 定义DataSource实例 const AppDataSource = new DataSource({ type: 'postgres', database: 'deliveryapi', entities: [], logging: true, synchronize: true, username: process.env.USERNAME || 'postgres', password: process.env.PASSWORD || 'Juventus', port: 5432, }); // 初始化数据库连接 await AppDataSource.initialize(); // Create express application for GraphQL server const apollo: ApolloServer = new ApolloServer({ schema: await buildSchema({ resolvers: [ActivityResolver], validate: false, }), plugins: [ApolloServerPluginLandingPageGraphQLPlayground()], }) const app: Express = express(); // All application required varibles const PORT = process.env.PORT || 5000; // Middleware and routes await apollo.start(); apollo.applyMiddleware({ app }); app.use(express.json()); app.get('/', (req, res) => {res.send("Hello World")}); // Start server app.listen(PORT, () => {console.log(`Server started on port ${PORT} and connected to database`)}); } main().catch(err => {console.error("Error: ", err)});
关键改动点:
- 导入
DataSource替代原有的createConnection - 创建
DataSource实例来管理数据库配置,替代直接调用createConnection - 通过
initialize()方法完成连接初始化,替代原连接对象的创建逻辑
内容的提问来源于stack exchange,提问作者Matteo Possamai
相关产品推荐
相关产品推荐

