Nestを始めよう
CoddyのNode.jsジャーニー「TypeScriptとNestJS」セクションの一部。レッスン 2/24。
Expressでは、各ルートは手動で登録する関数です。NestJSでは、APIの各部分に専用のクラスがあり、デコレーターによって各クラスの役割をNestに伝えます。
@Controller('books')
export class BooksController {
@Get()
findAll() {
return [{ title: 'Dune' }];
}
}コントローラーは、あるパスへのリクエストに応答します。@Controller('books')と@Get()はデコレーターです。デコレーターは@で始まり、クラスやメソッドの上の行に置かれ、その役割をNestに伝えます。Nestのデコレーターは、何も中に入らない場合でも、必ず()で終わります。これらを組み合わせることで、findAllがGET /booksに対応付けられ、Nestはメソッドの戻り値をステータス200のJSONとして送信します。Nestは、ルートデコレーターのないメソッドにリクエストを送ることはありません。
モジュールは、互いに関連するクラスをまとめたものです。src/main.tsはNestFactory.create(AppModule)を呼び出し、AppModuleはTasksControllerを登録したTasksModuleをインポートします。自分のノートパソコンではnpm run startで起動しますが、ここでは「実行」を使います。
スターターでは、interface Taskがタスクオブジェクトのフィールドを記述し、Task[]はその配列を意味します。privateを使うと、フィールドをそのクラス内に限定できます。メソッドの括弧の後にある型は、その戻り値を記述します。これらの型注釈はTypeScriptによるコードのチェックに役立ちます。Nestのデコレーターはルートを定義します。
チャレンジ
簡単最初のNestサーバーにはすでに3つのタスクがありますが、まだそれらを返すルートはありません。タスクの一覧を返すルートを追加しましょう。
src/tasks/tasks.controller.tsを開きます。クラスTasksControllerは、this.tasksにリストを保持しています。クラスの上にある@Controller('tasks')は、/tasks以下のパスをこのクラスが扱うようにします。- コメントがある場所にメソッド(
findAllという名前にします)を追加し、@Get()を付けます。このメソッドはthis.tasksを返します。Nestはメソッドの戻り値をJSONとして、ステータス200で送信します。 GetはControllerと同じく、@nestjs/commonからインポートします。1行目のインポートに追加しましょう。
試してみましょう:「実行」を押してから、GET /tasksを送信します。ステータス200と3つのタスクが返ります。
[
{ "id": 1, "title": "Write the README", "done": true },
{ "id": 2, "title": "Fix the login bug", "done": false },
{ "id": 3, "title": "Plan the sprint", "done": false }
]次に、sを付けずにGET /taskを送信します。このパスに一致するルートはないため、Nestは404を返します。
{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }自分で試してみよう
import { Controller } from '@nestjs/common';
interface Task {
id: number;
title: string;
done: boolean;
}
@Controller('tasks')
export class TasksController {
private tasks: Task[] = [
{ id: 1, title: 'Write the README', done: true },
{ id: 2, title: 'Fix the login bug', done: false },
{ id: 3, title: 'Plan the sprint', done: false },
];
// ここに、GET /tasks にリストを返すメソッドを追加してください。
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
TypeScriptとNestJSのすべてのレッスン
自分で練習してみよう: Expressプレイグラウンド