Logo
Section 1 / 5

使用 TypeORM 连接 PostgreSQL

学习如何在 NestJS 应用中使用 TypeORM 连接 PostgreSQL 数据库。

导入

使用 TypeORM 连接 PostgreSQL

学习如何在 NestJS 应用中使用 TypeORM 连接 PostgreSQL 数据库。

使用 TypeORM 在 PostgreSQL 数据库中获取书籍数据

1npm install --save @nestjs/typeorm typeorm pg
1import { Module } from '@nestjs/common'; 2import { AppController } from './app.controller'; 3import { AppService } from './app.service'; 4import { BooksModule } from './books/books.module'; 5import { TypeOrmModule } from '@nestjs/typeorm'; 6 7@Module({ 8 imports: [ 9 TypeOrmModule.forRoot({ 10 type: 'postgres', 11 host: 'localhost', 12 port: 5432, 13 username: 'postgres', 14 password: 'pwd123', 15 database: 'book_database', 16 entities: [], 17 synchronize: true, 18 }), 19 BooksModule 20 ], 21 controllers: [AppController], 22 providers: [AppService], 23}) 24export class AppModule {}
  • type:表示使用 PostgreSQL 作为数据库系统。

  • host、port:指定数据库的主机地址和连接端口。本例中,数据库运行在本地,默认 PostgreSQL 端口为 5432。

  • username、password:用于数据库连接的身份验证凭据。

  • database:指定连接的目标数据库为 book_database。

  • entities:该空数组后续将用于注册映射到数据库表的实体类。

  • synchronize:此选项在开发环境中非常方便,但在生产环境中存在高风险。启用后,TypeORM 会自动根据定义的实体同步创建或更新数据库表结构。然而,在生产环境中这可能导致数据丢失或其他严重问题,因此建议通过受控的迁移脚本(migration scripts)来管理数据库模式变更。

1import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; 2 3export enum Language { 4 ENGLISH = 'en', 5 FRENCH = 'fr', 6} 7 8@Entity() 9export class Book { 10 @PrimaryGeneratedColumn() 11 id: number; 12 13 @Column() 14 title: string; 15 16 @Column() 17 author: string; 18 19 @Column({ type: 'date' }) 20 publicationDate: Date; 21 22 @Column() 23 numberOfPages: number; 24 25 @Column({ type: 'enum', enum: Language }) 26 language: Language; 27}
1import { Module } from '@nestjs/common'; 2import { BooksController } from './books.controller'; 3import { BooksService } from './books.service'; 4import { TypeOrmModule } from '@nestjs/typeorm'; 5import { Book } from './entities/book.entity'; 6 7@Module({ 8 imports: [ 9 TypeOrmModule.forFeature([Book]) 10 ], 11 controllers: [BooksController], 12 providers: [BooksService] 13}) 14export class BooksModule {}
1import { Module } from '@nestjs/common'; 2import { AppController } from './app.controller'; 3import { AppService } from './app.service'; 4import { BooksModule } from './books/books.module'; 5import { TypeOrmModule } from '@nestjs/typeorm'; 6import { Book } from './books/entities/book.entity'; 7 8@Module({ 9 imports: [ 10 TypeOrmModule.forRoot({ 11 type: 'postgres', 12 host: 'localhost', 13 port: 5432, 14 username: 'postgres', 15 password: 'pwd123', 16 database: 'book_database', 17 entities: [Book], 18 synchronize: true, 19 }), 20 BooksModule 21 ], 22 controllers: [AppController], 23 providers: [AppService], 24}) 25export class AppModule {}

验证与错误处理

使用 TypeORM 仓库实现 CRUD 操作