如何搭建NestJS + MySQL + TypeScript項目
- 747字
- 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├── ormconfig.json16├── package.json17├── README.md18├── tsconfig.build.json19└── tsconfig.json
啟動項目
使用以下命令啟動項目:
1npm run start
默認情況下,NestJS項目會在http://localhost:3000
運行。你可以通過訪問該地址並使用Postman或其他工具測試API端點。
總結
本文詳細介紹了如何從零開始搭建一個NestJS + MySQL + TypeScript項目,包括項目初始化、安裝依賴、配置TypeORM、創建模塊和實現CRUD操作等步驟。