如何搭建NestJS + MySQL + TypeScript项目
- 739字
- 4分钟
- 2024-07-05
本文将详细介绍如何从零开始搭建一个NestJS + MySQL + TypeScript项目,帮助大家快速上手并构建自己的项目。
项目初始化
首先,我们需要全局安装Nest CLI:
1npm install -g @nestjs/cli
然后,使用Nest CLI创建一个新的项目:
1nest new my-nestjs-project
选择npm或yarn作为包管理工具,根据提示完成项目初始化。
安装必要的依赖
接下来,进入项目目录并安装必要的依赖项:
1cd my-nestjs-project2npm install --save @nestjs/typeorm typeorm mysql23npm install --save-dev @types/mysql2
这里我们安装了@nestjs/typeorm
、typeorm
和mysql2
包以及其类型定义文件。
创建模块、控制器和服务
接下来,使用Nest CLI生成一个用户模块:
1nest generate module users2nest generate controller users3nest generate service users
创建一个User实体,在src/users/user.entity.ts
中添加以下内容:
1import { Entity, Column, PrimaryGeneratedColumn } from "typeorm";2
3@Entity()4export class User {5 @PrimaryGeneratedColumn()6 id: number;7
8 @Column()9 name: string;10
11 @Column()12 email: string;13}
在src/users/users.module.ts
中导入User实体:
1import { Module } from "@nestjs/common";2import { TypeOrmModule } from "@nestjs/typeorm";3import { UsersService } from "./users.service";4import { UsersController } from "./users.controller";5import { User } from "./user.entity";6
7@Module({8 imports: [TypeOrmModule.forFeature([User])],9 providers: [UsersService],10 controllers: [UsersController],11})12export class UsersModule {}
实现CRUD操作
在src/users/users.service.ts
中实现CRUD操作:
1import { Injectable } from "@nestjs/common";2import { InjectRepository } from "@nestjs/typeorm";3import { Repository } from "typeorm";4import { User } from "./user.entity";5
6@Injectable()7export class UsersService {8 constructor(9 @InjectRepository(User)10 private usersRepository: Repository<User>,11 ) {}12
13 findAll(): Promise<User[]> {14 return this.usersRepository.find();15 }16
17 findOne(id: number): Promise<User> {18 return this.usersRepository.findOneBy({ id });19 }20
21 create(user: User): Promise<User> {22 return this.usersRepository.save(user);23 }24
25 async update(id: number, user: User): Promise<void> {26 await this.usersRepository.update(id, user);27 }28
29 async remove(id: number): Promise<void> {30 await this.usersRepository.delete(id);31 }32}
在src/users/users.controller.ts
中定义路由:
1import {2 Controller,3 Get,4 Post,5 Body,6 Param,7 Delete,8 Put,9} from "@nestjs/common";10import { UsersService } from "./users.service";11import { User } from "./user.entity";12
13@Controller("users")14export class UsersController {15 constructor(private readonly usersService: UsersService) {}16
17 @Get()18 findAll(): Promise<User[]> {19 return this.usersService.findAll();20 }21
22 @Get(":id")23 findOne(@Param("id") id: number): Promise<User> {24 return this.usersService.findOne(id);25 }26
27 @Post()28 create(@Body() user: User): Promise<User> {29 return this.usersService.create(user);30 }31
32 @Put(":id")33 update(@Param("id") id: number, @Body() user: User): Promise<void> {34 return this.usersService.update(id, user);35 }36
37 @Delete(":id")38 remove(@Param("id") id: number): Promise<void> {39 return this.usersService.remove(id);40 }41}
然后,在src/app.module.ts
中配置TypeORM模块:
1import { Module } from "@nestjs/common";2import { TypeOrmModule } from "@nestjs/typeorm";3import { AppController } from "./app.controller";4import { AppService } from "./app.service";5import { UsersModule } from "./users/users.module";6import { User } from "./users/user.entity";7
8@Module({9 imports: [10 TypeOrmModule.forRoot({11 type: "mysql",12 host: "localhost",13 port: 3306,14 username: "root",15 password: "password",16 database: "test",17 entities: [User],18 synchronize: true,19 }),20 UsersModule,21 ],22 controllers: [AppController],23 providers: [AppService],24})25export class AppModule {}
注意:synchronize在正式环境中建议设置为false,否则会有丢失数据的风险。
项目目录结构
项目的目录结构应类似于:
1my-nestjs-project2├── src3│ ├── app.controller.ts4│ ├── app.module.ts5│ ├── app.service.ts6│ ├── main.ts7│ └── users8│ ├── user.entity.ts9│ ├── users.controller.ts10│ ├── users.module.ts11│ └── users.service.ts12├── test13├── .gitignore14├── nest-cli.json15├── package.json16├── README.md17├── tsconfig.build.json18└── tsconfig.json
启动项目
使用以下命令启动项目:
1npm run start
默认情况下,NestJS项目会在http://localhost:3000
运行。你可以通过访问该地址并使用Postman或其他工具测试API端点。
总结
本文详细介绍了如何从零开始搭建一个NestJS + MySQL + TypeScript项目,包括项目初始化、安装依赖、配置TypeORM、创建模块和实现CRUD操作等步骤。


