如何搭建NestJS + MySQL + TypeScript项目

本文将详细介绍如何从零开始搭建一个NestJS + MySQL + TypeScript项目,帮助大家快速上手并构建自己的项目。

项目初始化

首先,我们需要全局安装Nest CLI:

Terminal window
1
npm install -g @nestjs/cli

然后,使用Nest CLI创建一个新的项目:

Terminal window
1
nest new my-nestjs-project

选择npm或yarn作为包管理工具,根据提示完成项目初始化。

安装必要的依赖

接下来,进入项目目录并安装必要的依赖项:

Terminal window
1
cd my-nestjs-project
2
npm install --save @nestjs/typeorm typeorm mysql2
3
npm install --save-dev @types/mysql2

这里我们安装了@nestjs/typeormtypeormmysql2包以及其类型定义文件。

创建模块、控制器和服务

接下来,使用Nest CLI生成一个用户模块:

Terminal window
1
nest generate module users
2
nest generate controller users
3
nest generate service users

创建一个User实体,在src/users/user.entity.ts中添加以下内容:

1
import { Entity, Column, PrimaryGeneratedColumn } from "typeorm";
2
3
@Entity()
4
export 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实体:

1
import { Module } from "@nestjs/common";
2
import { TypeOrmModule } from "@nestjs/typeorm";
3
import { UsersService } from "./users.service";
4
import { UsersController } from "./users.controller";
5
import { User } from "./user.entity";
6
7
@Module({
8
imports: [TypeOrmModule.forFeature([User])],
9
providers: [UsersService],
10
controllers: [UsersController],
11
})
12
export class UsersModule {}

实现CRUD操作

src/users/users.service.ts中实现CRUD操作:

1
import { Injectable } from "@nestjs/common";
2
import { InjectRepository } from "@nestjs/typeorm";
3
import { Repository } from "typeorm";
4
import { User } from "./user.entity";
5
6
@Injectable()
7
export 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中定义路由:

1
import {
2
Controller,
3
Get,
4
Post,
5
Body,
6
Param,
7
Delete,
8
Put,
9
} from "@nestjs/common";
10
import { UsersService } from "./users.service";
11
import { User } from "./user.entity";
12
13
@Controller("users")
14
export 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模块:

1
import { Module } from "@nestjs/common";
2
import { TypeOrmModule } from "@nestjs/typeorm";
3
import { AppController } from "./app.controller";
4
import { AppService } from "./app.service";
5
import { UsersModule } from "./users/users.module";
6
import { 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
})
25
export class AppModule {}

注意:synchronize在正式环境中建议设置为false,否则会有丢失数据的风险。

项目目录结构

项目的目录结构应类似于:

1
my-nestjs-project
2
├── src
3
│ ├── app.controller.ts
4
│ ├── app.module.ts
5
│ ├── app.service.ts
6
│ ├── main.ts
7
│ └── users
8
│ ├── user.entity.ts
9
│ ├── users.controller.ts
10
│ ├── users.module.ts
11
│ └── users.service.ts
12
├── test
13
├── .gitignore
14
├── nest-cli.json
15
├── package.json
16
├── README.md
17
├── tsconfig.build.json
18
└── tsconfig.json

启动项目

使用以下命令启动项目:

Terminal window
1
npm run start

默认情况下,NestJS项目会在http://localhost:3000运行。你可以通过访问该地址并使用Postman或其他工具测试API端点。

总结

本文详细介绍了如何从零开始搭建一个NestJS + MySQL + TypeScript项目,包括项目初始化、安装依赖、配置TypeORM、创建模块和实现CRUD操作等步骤。

美团外卖红包 饿了么红包 支付宝红包