在NestJS中使用mikro-orm的實現(xiàn)
什么是ORM?
簡單來說,ORM 是為了讓開發(fā)者在 TypeScript / JavaScript 等語言中,用對象、類、方法的方式操作關系型數據庫,減少直接編寫 SQL 的需求,同時獲得類型提示、實體關系管理、遷移等工程化能力。
MIKRORM
就在上個月,MIKRORM剛剛發(fā)布了7.0版本,這是一次重大的版本更新。這篇文章就介紹了,如何在NestJS中使用最新的MIKORM
使用過程
1.創(chuàng)建NestJS項目
這一步略過,詳情可以參考之前的創(chuàng)建過程
2.安裝
來到MIKRORM的官網,可以看到它提供了多種的數據庫安裝,以postgres為例: 執(zhí)行命令 pnpm add @mikro-orm/core @mikro-orm/nestjs @mikro-orm/postgresql
3.導入配置文件
官網提供的方式是直接在AppModule中導入。
@Module({
imports: [
MikroOrmModule.forRoot({
entities: ['./dist/entities'],
entitiesTs: ['./src/entities'],
dbName: 'my-db-name.sqlite3',
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
但是我認為這樣的方式并不優(yōu)雅,相當于把MikroOrm混雜在了AppModule中,并且這種配置方式只能作用在MIKRORM項目中,無法被Mikro-cli讀取,因此我們這里采用單獨創(chuàng)建MikroOrm配置文件的方式導入。
在根目錄下創(chuàng)建mikro-orm.config.ts,同時寫入:
import { defineConfig } from '@mikro-orm/postgresql';
export default defineConfig({
dbName: 'sqlite.db',
debug: true,
});
然后安裝Mikro-cli工具,執(zhí)行命令:pnpm add @mikro-orm/cli -D。為了檢測我們的項目能否識別到MikroORM配置,使用命令npx mikro-orm debug
此時我們會發(fā)現(xiàn),根本檢測不到??!這是V7版本的一大更新!V7版本加載Typescript的工具不再是ts-node而是tsx。之前能檢測到的原因是NestJS項目本身就自帶了ts-node。因此我們再裝一下tsx,執(zhí)行命令pnpm add tsx
為什么要做這個轉變呢?(坑后續(xù)再填,我現(xiàn)在也不知道)
4.修改配置文件
我們需要MikrORM可以自動識別實體類,因此加入
import { defineConfig } from '@mikro-orm/postgres';
export default defineConfig({
entities: ['dist/**/*.entity.js'],
entitiesTs: ['src/**/*.entity.ts'],
// ...
});5.建立數據庫連接
V7無法自動的讀取環(huán)境變量中的配置了,因此需要手動安裝pnpm add dotenv -D,然后在配置文件中導入import 'dotenv/config'
接下來,在根路徑下創(chuàng)建.env文件,文件內容如下
//根據自己的數據庫名稱等信息填寫 DB_NAME=postgres DB_USER=postgres DB_PASSWORD=123456 DB_HOST=localhost DB_PORT=5432
然后在配置文件中顯示的聲明:
import 'dotenv/config';
import { defineConfig } from '@mikro-orm/postgresql';
import { TsMorphMetadataProvider } from '@mikro-orm/reflection';
export default defineConfig({
dbName: process.env.DB_NAME,
password: process.env.DB_PASSWORD,
port: Number(process.env.DB_PORT),
host: process.env.DB_HOST,
entities: ['dist/**/*.entity.js'],
entitiesTs: ['src/**/*.entity.ts'],
debug: true,
});
此時再次運行npx mikro-orm debug就會發(fā)現(xiàn)不僅能檢測到我們的配置文件,還可以檢測到實體類,并且數據庫連接也是正常的
6.元數據反射配置
為啥需要它?TypeScript 有一個特性:在編譯成 JavaScript 后,所有的類型信息都會消失。MikroORM 需要知道該在數據庫建什么類型的字段,JS 原生是做不到的。 安裝pnpm add @mikro-orm/reflection
7.實體類上的裝飾器
原本V6,將entity和Mikr-ORM配合起來,只需要在對應字段加上裝飾器即可。但是在V7版本中,需要引入包import { Entity, PrimaryKey, Property } from '@mikro-orm/decorators/legacy';
import { Entity, PrimaryKey, Property } from '@mikro-orm/decorators/legacy';
@Entity()
export class Todo {
@PrimaryKey()
id: number;
@Property()
title: string;
@Property({ type: 'text' })
content: string;
@Property()
isCompleted: boolean;
}
到此這篇關于在NestJS中使用mikro-orm的實現(xiàn)的文章就介紹到這了,更多相關NestJS使用mikro-orm內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript實現(xiàn)省市聯(lián)動過程中bug的解決方法
這篇文章主要為大家詳細介紹了解決JavaScript實現(xiàn)省市聯(lián)動過程中的bug,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12

