NestJsでサービスを作成し、データを操作する方法
NestJSでのサービスの作成とデータ操作について学びましょう。
概要
NestJSでは、サービスはビジネスロジックをカプセル化し、コントローラーとデータベースの間の橋渡しを行います。この記事では、NestJSでサービスを作成し、データを操作する方法を詳しく解説します。
nest.js v10.1.7
nodejs v19.7.0
また、今回作成するコードは全て、GitHubに掲載しています。
サービスを作成する方法
Nest.js には、Nest CLI という非常に便利なコマンドラインツールがあります。これを使用することで、サービスファイル・サービステストファイル・プロバイダーの登録を全て自動的に行うことができます。
以下のコマンドを実行すると、users ディレクトリにサービスファイルとサービステストファイルが追加されます。
nest g s users
実行すると users ディレクトリにサービスファイルとサービステストファイルが追加されます。
src/
└── users/
├── users.service.spec.ts
└── users.service.ts
app.module.ts を確認してください。プロバイダーの登録も自動的に行われたことがわかります。
/src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UsersController } from './users/users.controller';
import { UsersService } from './users/users.service'; // CLI 実行時に自動登録
@Module({
imports: [],
controllers: [AppController, UsersController],
providers: [AppService, UsersService], // CLI 実行時に自動登録
})
export class AppModule {}
サービスの機能を作成する方法
次に、UsersServiceにデータ操作のロジックを実装します。ここでは、ユーザーのデータを保持する配列を作成し、ユーザーの取得、追加、削除のメソッドを実装します。
/src/users/users.service.ts
import { Injectable } from '@nestjs/common';
interface User {
id: number;
name: string;
}
@Injectable()
export class UsersService {
private users: User[] = [
{ id: 1, name: 'John' },
{ id: 2, name: 'Jane' },
{ id: 3, name: 'Doe' },
];
getUsers(): User[] {
return this.users;
}
addUser(name: string): void {
const newUser: User = {
id: this.users.length + 1,
name,
};
this.users.push(newUser);
}
putUser(id: number, name: string): void {
const index = this.users.findIndex((user) => user.id === Number(id));
if (index === -1) {
console.error(`User with id ${id} not found.`);
return;
}
console.log(`Updating user with id ${id} to have name ${name}`);
this.users[index] = { ...this.users[index], name };
}
deleteUser(id: number): void {
this.users = this.users.filter((user) => user.id !== Number(id));
}
}
これで、UsersServiceはユーザーのデータを操作するロジックを持つようになりました。
コントローラーを修正する方法
最後に、UsersControllerを修正して、UsersServiceのメソッドを呼び出すようにします。
/src/users/users.controller.ts
import {
Controller,
Get,
Post,
Put,
Delete,
Body,
Param,
} from '@nestjs/common';
import { UsersService } from './users.service';
interface User {
id: number;
name: string;
}
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
getUsers(): User[] {
return this.usersService.getUsers();
}
@Post()
addUser(@Body() name: string): void {
this.usersService.addUser(name);
}
@Put(':id')
putUser(@Param('id') id: number, @Body('name') name: string): void {
this.usersService.putUser(id, name);
}
@Delete(':id')
deleteUser(@Param('id') id: number): void {
this.usersService.deleteUser(id);
}
}
これで、UsersControllerはリクエストに応じてUsersServiceのメソッドを呼び出すようになりました。
テスト
# ユーザー一覧の取得
curl http://localhost:3000/users
# ユーザーの追加
curl -X POST -H "Content-Type: application/json" -d '{"name":"Mike"}' http://localhost:3000/users
# ユーザーの更新
curl -X PUT -H "Content-Type: application/json" -d '{"name": "Bob"}' http://localhost:3000/users/1
# ユーザーの削除
curl -X DELETE http://localhost:3000/users/4
まとめ
この記事では、NestJSでサービスを作成し、データを操作する方法を学びました。サービスは、ビジネスロジックをカプセル化し、コントローラーとデータベースの間の橋渡しを行います。NestJSのサービスは、アプリケーションのロジックを整理し、コードの再利用を促進します。