上篇分享了用 Docker 啟用 Postgresql,這次要來分享怎麼在 Nest.js 中使用 Postgresql 資料庫。
Nest.js 採用了 TypeORM,是一套用 TypeScript 編寫的 ORM 框架,支援 MySQL、Postgresql、SQLite ...等。這次會先以如何在專案上連線到上篇設定好的 Postgresql 為主:
一、安裝套件
要在 Nest.js 使用 TypeORM,要先到專案底下輸入:
yarn add @nestjs/typeorm typeorm
接著,因為這次選用 Postgresql,所以需要輸入:
yarn add pg
如果要使用 TypeORM 的 cli 指令,可以輸入:
yarn global add typeorm
二、建立 ormconfig.json
接下來要建立連線資訊,有兩個方式:
- 在專案根目錄下新增檔案
ormconfig.json
- 如果有安裝 TypeORM cli,可以輸入
typeorm init --database postgres
創建完成後,將 ormconfig.json
填寫如下設定(可參考上篇用 Nest.js 開發 API 吧 (五) - Postgresql
):
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "postgres",
"password": "{YOUR PASSWORD}",
"database": "postgres",
"synchronize": true,
"logging": false,
"entities": ["dist/entity/**/*.entity{.ts,.js}"],
"migrations": ["src/migration/**/*.{.ts,.js}"],
"subscribers": ["src/subscriber/**/*.ts"],
"cli": {
"entitiesDir": "src/entity",
"migrationsDir": "src/migration",
"subscribersDir": "src/subscriber"
}
}
其中值得分享的是以下這段設定:
"entities": ["dist/entity/**/*.entity{.ts,.js}"]
如果是用 CLI 創建路徑會是 src/entity/**/*.ts
,但實際執行會遇到無法解讀 .ts 檔案的問題,查詢了一下相關 issue 發現要去指向 build 出來的 .ts
或 .js
檔案。所以如果要使用 migrations
或 subscribers
,也需要將路徑做調整。
三、創建 User Entity
首先,我們先在 src
下建立 entity
的資料夾,並新增檔案 users.entity.ts
,接著可以參考以下程式碼:
import {Entity, PrimaryGeneratedColumn, Column} from "typeorm";
@Entity('users')
export class Users {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: 'varchar',
length: 255,
})
email: string;
@Column({
type: 'varchar',
length: 255,
})
password: string;
@Column({
type: 'varchar',
length: 255,
default: null
})
token: string;
@Column({
default: false,
})
is_verify: boolean;
@Column({
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP(6)'
})
created_at: Date;
@Column({
type: 'timestamp',
default: () => 'CURRENT_TIMESTAMP(6)',
onUpdate: 'CURRENT_TIMESTAMP(6)'
})
updated_at: Date;
}
接著我們到 src/app.module.ts
去引入 TypeOrmModule,如下所示:
import {TypeOrmModule} from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot(),
],
使用 TypeOrmModule.forRoot()
,他就會去 ormconfig.json 去抓取相關設定。
最後執行 yarn start:dev
,並開啟 pgAdmin,就能看到 users
table 被建立,只要是因為我們在 ormconfig.json
設定:
"synchronize": true,
連線時會根據 entity 的設定自動同步,如果不想自動同步可以改為 false
。
小結
今天分享了 Nest.js 如何利用 TypeORM 連線 Postgresql,並利用 entity 創建一張 table,下一篇預計分享關於 entity 的詳細設定,如果文章有任何錯誤或建議,歡迎告知!