nestjs实战(三):使用 TypeORM 连接达梦数据库(附源码从零到一,新手也能成功)
新建,复制以下代码:javascriptcolumns: {id: {generated: true, // 自增主键},name: {},age: {},},});
还在为国产化项目里NestJS连不上达梦发愁?网上搜到的方案要么版本太旧,要么踩坑没人填?试了一下午,换了三个方言包,终于跑通了!
今天把这份 “保姆级教程+可运行代码” 全部分享出来,包含环境搭建、依赖安装、CRUD完整实现、常见报错解决方案。只要你跟着敲,10分钟就能让你的NestJS项目顺畅操作达梦数据库!
先看看你能收获什么
-
✅ 最稳的方言包组合:
typeorm-dm + dmdb,经过Node 16/18实测。 -
✅ 纯JavaScript可运行脚本:不依赖NestJS框架,新建一个
ts.js就能测通。 -
✅ 完整的用户表增删改查:复制即用,快速验证你的数据库连接。
-
✅ 5个最常见的报错解法:从MODULE_NOT_FOUND到加密失败,一网打尽。
如果你觉得有用,记得点赞👍、收藏🌟、评论💬支持一下!你的鼓励是我分享更多实战干货的动力~
1. 先搞清楚:NestJS + ORM + 达梦 = 国产化项目标配
随着国产化进程加速,达梦数据库在政府、金融、能源等行业的项目中越来越常见。NestJS 作为企业级 Node.js 框架,搭配 TypeORM 这样的成熟 ORM,能极大提升开发效率和代码可维护性。
核心原理(为什么能连?)
-
NestJS 不直接实现 ORM,而是通过依赖注入和模块化设计,无缝集成 TypeORM、Prisma 等工具。
-
TypeORM 本身不原生支持达梦,但社区开发了专门的“方言包”(如
typeorm-dm、@newpower/typeorm-dmdb8),它们在 TypeORM 核心基础上,增加了达梦数据库的数据类型映射、SQL 方言转换和驱动适配。 -
这些方言包通常配合达梦官方 Node.js 驱动
dmdb一起使用,通过type: "oracle"和innerType: "dmdb"等配置项来激活达梦支持。
2. 环境准备与方案选型
在开始之前,确保你的开发环境满足以下条件:
-
Node.js:推荐使用 16.x 或 18.x LTS 版本。高版本(如 20+、24+)可能与
dmdb驱动存在兼容性问题。 -
达梦数据库:已安装并运行,知道连接地址、端口(默认 5236)、用户名、密码和模式名(Schema)。
-
NestJS 项目:已通过
@nestjs/cli创建好的基础项目。
两种主流方言包对比
| 方言包 | 安装命令 | 特点 |
|---|---|---|
| typeorm-dm | npm install typeorm-dm dmdb |
社区使用较广,文档相对丰富,与 typeorm@0.3.x 兼容性好 |
| @newpower/typeorm-dmdb8 | npm install @newpower/typeorm-dmdb8 dmdb |
基于 typeorm@0.3.26 定制,维护活跃 |
本文将以 typeorm-dm 为例,因为它在解决依赖冲突方面更稳定,也是我最终成功连接的方案。
3. 环境准备(看完再动手,少踩一半坑)
-
Node.js版本:推荐 16.x 或 18.x LTS(亲测最稳,高版本可能遇到驱动编译问题)
-
达梦数据库:已安装,知道IP、端口(默认5236)、用户名、密码、模式名(Schema)
-
编辑器:VSCode或其他,新建一个空文件夹即可,不需要NestJS项目结构
📢 如果你用的是Node 20+,后面遇到加密错误不要慌,文末有解决方案。
4. 依赖安装(一步都不能错)
打开终端,进入你的空文件夹,执行:
bash
npm install typeorm-dm dmdb reflect-metadata
安装完后,可以检查一下package.json,确保typeorm的版本是^0.3.x。如果之前装过其他方言包,先删掉node_modules和package-lock.json再装。
5. 定义用户实体(纯JS友好版)
新建user.entity.js,复制以下代码:
javascript
const { EntitySchema } = require('typeorm');
module.exports = new EntitySchema({
name: 'User',
tableName: 'T_USER',
columns: {
id: {
primary: true,
type: 'int',
generated: true, // 自增主键
},
name: {
type: 'varchar',
length: 50,
},
age: {
type: 'int',
nullable: true,
},
},
});
6. 完整CRUD测试脚本(ts.js)
创建ts.js,将下面的代码复制进去,务必修改数据库连接参数(用户名、密码、schema):
javascript
const { DmdbDataSource } = require('typeorm-dm');
require('reflect-metadata');
const UserEntity = require('./user.entity'); // 引入实体定义
const AppDataSource = new DmdbDataSource({
type: "oracle",
innerType: "dmdb",
host: "localhost",
port: 5236,
username: "SYSDBA",
password: "aaaa123456",
schema: "DMTEST",
entities: [UserEntity], // 注册实体
synchronize: true, // 开发环境自动创建表(生产环境慎用)
logging: false,
extra: {
connectTimeout: 30000,
}
});
async function run() {
try {
await AppDataSource.initialize();
console.log("✅ 数据库连接成功");
// 获取 User 的 Repository
const userRepo = AppDataSource.getRepository('User');
// 插入一条数据
let newUser = await userRepo.save({ name: '张三', age: 30 });
console.log("✅ 插入成功,ID:", newUser.id);
newUser = await userRepo.save({ name: '李四', age: 40 });
console.log("✅ 插入成功,ID:", newUser.id);
newUser = await userRepo.save({ name: '王五', age: 50 });
console.log("✅ 插入成功,ID:", newUser.id);
// 查询所有用户
const users = await userRepo.find();
console.log("✅ 用户列表:", users);
await AppDataSource.destroy();
} catch (error) {
console.error("❌ 操作失败:", error.message);
}
}
run();
7. 运行测试
bash
node ts.js
如果一切顺利,你会看到类似下面的输出:

查看dm数据库

恭喜!你已经成功用Node.js操作了达梦数据库! 🎉
8. 常见问题 & 解决方案(建议收藏)
❌ 问题1:Error: Cannot find module 'typeorm-dm'
原因:未安装typeorm-dm
解决:执行npm install typeorm-dm,并确认node_modules里有该包。
❌ 问题2:TypeError: DmdbDataSource is not a constructor
原因:导入方式错误,该包是命名导出
解决:使用const { DmdbDataSource } = require('typeorm-dm');(注意花括号)
❌ 问题3:DriverPackageNotInstalledError: Oracle package not found
原因:未安装dmdb驱动,或innerType配置未生效
解决:安装dmdb:npm install dmdb,并检查配置中innerType: "dmdb"是否正确。
❌ 问题4:连接时报 [6071] 消息加密失败
原因:加密参数不匹配
解决:在extra中添加loginEncrypt: false,如下:
javascript
extra: {
loginEncrypt: false,
}
❌ 问题5:Node版本过高,编译失败
原因:达梦驱动对高版本Node支持不完善
解决:降级到Node 16或18(推荐使用nvm管理版本)
如果你觉得有用,记得点赞👍、收藏🌟、评论💬支持一下!你的鼓励是我分享更多实战干货的动力~
更多推荐
所有评论(0)