NestJS 与 TypeORM 项目教程
项目介绍
NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用渐进式 JavaScript,完全支持 TypeScript(但同时仍然允许开发者使用纯 JavaScript 编写代码),并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应编程)的元素。
TypeORM 是一个非常成熟的对象关系映射器(ORM),适用于 TypeScript 和 JavaScript。由于它是用 TypeScript 编写的,因此与 NestJS 框架集成得非常好。
项目快速启动
安装依赖
首先,克隆项目仓库并安装必要的依赖:
git clone https://github.com/GauSim/nestjs-typeorm.git
cd nestjs-typeorm
npm install
配置数据库
在项目根目录下创建一个 ormconfig.json
文件,并配置你的数据库连接:
{
"type": "postgres",
"host": "localhost",
"port": 5432,
"username": "yourusername",
"password": "yourpassword",
"database": "yourdatabase",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true
}
启动应用
运行以下命令启动应用程序:
npm run start
应用案例和最佳实践
创建一个简单的 CRUD 应用
以下是一个简单的示例,展示如何在 NestJS 中使用 TypeORM 创建一个基本的 CRUD 应用:
创建实体
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
}
创建服务
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find();
}
findOne(id: number): Promise<User> {
return this.usersRepository.findOne(id);
}
async remove(id: number): Promise<void> {
await this.usersRepository.delete(id);
}
}
创建控制器
import { Controller, Get, Param } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.entity';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
findAll(): Promise<User[]> {
return this.userService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string): Promise<User> {
return this.userService.findOne(+id);
}
}
典型生态项目
集成 Swagger
为了更好地进行 API 文档管理,可以集成 Swagger:
npm install --save @nestjs/swagger swagger-ui-express
在 main.ts
中配置 Swagger:
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('API')
.setDescription('The API description')
.setVersion('1.0')
.addTag('api')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule