はじめに
NestJSについての備忘録です。
参考程度にお願いいたします。
これからも追記していく予定です。
NestJSとは
- Node.js上で動作するオープンソースのバックエンド開発フレームワーク
- TypeScriptで作られている
- Expressをコアにして作られている
- Angularにインスパイアされている
NestJSを使うメリット
- 型の恩恵を得ることができる
- Expressの機能やライブラリを使うことができる
- Nest CLIを使ってプロジェクトやファイルのテンプレートを生成できる
- テストフレームワークが標準で用意されている
- 拡張性が高い
NestJSを使うデメリット
- Rails、Laravel、Djangoなどと比較すると利用ユーザーが少なく、情報が少ない
- 公式ドキュメントが日本語に非対応
Nest CLI
- Nestコマンドラインインターフェース
- プロジェクトの雛形を用意することができる
新規プロジェクト作成のコマンド
nest new プロジェクト名
新規コントローラの作成
nest g controller コントローラ名
NestJSのアーキテクチャ
NestJSにおける最もコアとなる要素
- Controller
- Service
- Module
Moduleとは
- 関連するControllerやServiceなどをまとめ、アプリケーションとして利用できるようにNestJSに登録する役割
- NestJSアプリケーションには必ず1つ以上のルートモジュールと、0個以上のFeatureモジュールが必要となる
Moduleの定義
1.classに@Module()デコレーターをつける
2.@Module()デコレーターのプロパティを記述する
Controllerとは
- クライアントからのリクエストを受け付け、クライアントにレスポンスを返す
- Controllerがルーティングの機能を担う
- 特定のパスとControllerが紐付けられる(例:/usersとUsersController)
- HTPPメソッドとパスを指定したメソッド(ハンドラー)を定義する
Serviceとは
- ビジネスロジックを定義する
- Controllerから呼び出すことで、ユースケースを実現する
Dependency Injection(DI)
- 日本語にすると「依存性の注入」
- 依存関係のあるオブジェクトを外部から渡す
JWTとは
- JSON Web Tokenの略称で、JSONの形をした認証情報
- 電子署名により、改ざんの検知が可能
- 認証用のトークンとして使用される
JWTの構成
- 3つの要素から構成される
- ヘッダ:ハッシュアルゴリズムの情報などのメタデータ
- ペイロード:認証対象の情報で、ユーザー名やIDなど任意の情報
- 署名:ヘッダとペイロードのエンコードしたものに秘密鍵を加えてハッシュ化したもの
- 要素ごとにBase64エンコードされている
- 3つの要素が.(ドット)で結合されている
JWTのメリット
- 署名が含まれているため、改ざんチェックできる
- 有効期限をつけるなど、セキュアなToken発行を行える
- セッションと異なり、状態をサーバーで管理する必要がない
- 任意のデータをTokenに含めることができる