NestJS + MySQL + TypeScriptプロジェクトの構築方法
- 794単語
- 4分
- 05 Jul, 2024
本文では、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操作の実装などの手順を詳細に紹介しました。