Menu
CoddyTech

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のデコレーターはルートを定義します。

challenge icon

チャレンジ

簡単

最初のNestサーバーにはすでに3つのタスクがありますが、まだそれらを返すルートはありません。タスクの一覧を返すルートを追加しましょう。

  1. src/tasks/tasks.controller.tsを開きます。クラスTasksControllerは、this.tasksにリストを保持しています。クラスの上にある@Controller('tasks')は、/tasks以下のパスをこのクラスが扱うようにします。
  2. コメントがある場所にメソッド(findAllという名前にします)を追加し、@Get()を付けます。このメソッドはthis.tasksを返します。Nestはメソッドの戻り値をJSONとして、ステータス200で送信します。
  3. 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 にリストを返すメソッドを追加してください。
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

TypeScriptとNestJSのすべてのレッスン

自分で練習してみよう: Expressプレイグラウンド