# TypeORM
TypeORM 是个优秀的 ORM 框架,快可以比肩 JPA 了,但是他们俩的共同问题是, 他们第一适配的是 SQL 类数据库,对 MongoDB 的适配马马虎虎。
同时考虑到,团队之前一直在使用 Mongoose ,继续使用熟悉的 Mongoose 对我们来说是个更好的选择。
# Nest 的 Mongoose
Nest 在MongoDB 的使用上有两篇文档: Mongo Mongoose
效果嘛,挺糟糕的,老问题,mongoose 的 Schema 和 Interface 定义是分离的,要写很多重复代码
# Nest with Typegoose
Typegoose 可以帮我们使用 Class 来定义一个 Model,社区中也已经有人做好了 Nest 和 Typegoose 的适配 在这个基础上,我们在结合 config,可以非常简单的完成配置。
在 config 中配置好 mongodb 的链接,支持多个 DB
module.exports = {
port: process.env.PORT || 3000,
mongodb: {
debug: true,
connections: [
{
name: 'core',
url: 'mongodb://localhost:57017/core',
options: {
useNewUrlParser: true,
useUnifiedTopology: true
}
},
{
name: 'app',
url: 'mongodb://localhost:57017/app',
options: {
useNewUrlParser: true,
useUnifiedTopology: true
}
}
]
}
}
然后在 APPModule 中初始化 Typegoose
import {Module} from '@nestjs/common'
import {UsersModule} from './users/users.module'
import {TypegooseModuleBuilder} from '@klg/mongoose'
@Module({
imports: [
TypegooseModuleBuilder.forRoot(),
UsersModule
]
})
export class ApplicationModule {
}
TypegooseModuleBuilder 是我们写好的一个工具类, 作用读取 config 的 uri 然后初始化 Typegoose。
注意 TypegooseModuleBuilder 在 @klg/mongoose 中引入