高瀬博道の技術ブログ

高瀬博道の技術ブログです。

NestJS

NestJS でデータベース操作できるようにする - 6

前回 takasehiromichiex.com TypeORMのマイグレーションについて モデルが変更される場合、それをデータベースに同期する必要があります。 synchronize: trueというオプションをルートモジュールで設定していましたが、これはEntityに基づいてテーブルを自動…

NestJS でデータベース操作できるようにする - 5

前回 takasehiromichiex.com サブスクライバ TypeORM サブスクライバを使用すると、特定のエンティティイベントをリッスンすることができます。 まず、エンティティを作成します。 src/cats/cats.entity.ts import { Column, Entity, PrimaryGeneratedColumn…

NestJS でデータベース操作できるようにする - 4

前回 takasehiromichiex.com TypeORM トランザクション TypeORMでトランザクションを処理することができます。 src/user/user.service.ts import { Injectable } from "@nestjs/common"; import { InjectRepository } from "@nestjs/typeorm"; import { Data…

NestJS でデータベース操作できるようにする - 3

前回 takasehiromichiex.com スキーマ Entityとしてモデルを定義するのとは別に、Entity Schemaで列の状態などを定義することができます。 Entity Schemaを作成してみます。 まず、Entityを修正します。 src/user/entities/user.entity.ts import { Photo } …

NestJS でデータベース操作できるようにする - 2

前回 takasehiromichiex.com ユーザモジュールへのEntityの紐付け ユーザモジュールへEntityを紐づけます。 src/user/user.module.ts import { Module } from "@nestjs/common"; import { UserService } from "./user.service"; import { UserController } f…

NestJS でデータベース操作できるようにする - 1

概要 以下でNestJSに入門したので、今度はデータベース操作ができるようになるまで掘り下げていきます。 takasehiromichiex.com データベース NestJSは、様々なORMを使用することができます。 MikroORM Sequelize Knex.js TypeORM Prisma または、データベー…

NestJSに入門する記事を書いた

概要 今までブログも記事も書いたことがほとんどなかったので、試しに今まで気になっていたNestJSに入門する記事を書いてみました。 これは、公式サイトのOVERVIEWを網羅する範囲になります。 公式サイト docs.nestjs.com 記事一覧 その1 セットアップ、ディ…

もう2023年になったので、今さらNestJSに入門しようと思う - その21

前回 takasehiromichiex.com カスタムプロバイダを使用するケース カスタムプロバイダを使用するケースは、以下のようなものがあります。 Nestでクラスをインスタンス化する代わりにカスタムインスタンスを返す 2番目の依存関係で既存のクラスを再利用する …

もう2023年になったので、今さらNestJSに入門しようと思う - その20

前回 takasehiromichiex.com DIの基礎 依存性注入は、依存関係のインスタンス化を独自のコードで強制的に行うのではなく、IoCコンテナ、つまりNestJSランタイムシステムに移譲する制御の反転手法です。 まず、@Injectable()デコレータは、クラスをプロバイダ…

もう2023年になったので、今さらNestJSに入門しようと思う - その19

前回 takasehiromichiex.com デコレータ Nestは、デコレータを中心に構築されています。 デコレータは、@のプレフィックスをつけ、装飾するものの上に配置して適用します。 デコレータは、クラス、メソッド、プロパティにつけることができます。 パラメータ…

もう2023年になったので、今さらNestJSに入門しようと思う - その18

前回 takasehiromichiex.com nullを除外するインターセプタ null値が出現するたびに、空の文字列に変換するインターセプタを作成します。 $ nest g interceptor interceptor/excludeNull 以下のファイルが作成されました。 src/interceptor/exclude-null/exc…

もう2023年になったので、今さらNestJSに入門しようと思う - その17

前回 takasehiromichiex.com インターセプタのレスポンスマッピング handle()はObservableを返しますが、ストリームにはルートハンドラから返却された値が含まれているので、RxJSのmap()を使用して簡単に変更することができます。 新しいインターセプタを作…

もう2023年になったので、今さらNestJSに入門しようと思う - その16

前回 takasehiromichiex.com インターセプタ インターセプタは、@Injectable()デコレータがつけられたクラスで、NestInterceptorクラスを実装します。 インターセプタは、以下が可能です。 メソッド実行の前後に追加のロジックを実行する メソッドから返却さ…

もう2023年になったので、今さらNestJSに入門しようと思う - その15

前回 takasehiromichiex.com 実行コンテクスト canActivate()メソッドは、ExecutionContextインスタンスという1つの引数をとります。 ExecutionContextは、ArgumentsHostから継承します。 ArgumentsHostを拡張することで、ExecutionContextは、現在の実行プ…

もう2023年になったので、今さらNestJSに入門しようと思う - その14

前回 takasehiromichiex.com Guards ガードは、CanActivateインターフェースを実装する、@Injectable()デコレータがつけられたクラスです。 ガードの責任は、実行時に存在する特定の条件 (パーミッション、ロール、アクセスコントロールリストなど) に応じて…

もう2023年になったので、今さらNestJSに入門しようと思う - その13

前回 takasehiromichiex.com クラスバリデータを用いたパイプ Nestは、class-validatorライブラリと連携することができます。 このライブラリを使用すると、デコレータベースのバリデーションを使用できます。 ライブラリをインストールします。 $ npm insta…

もう2023年になったので、今さらNestJSに入門しようと思う - その12

前回 takasehiromichiex.com オブジェクトスキーマを検証するパイプ バリデーションの1つとして、スキーマベースのパイプを作成してみましょう。 joiライブラリを使用します。 $ npm install --save joi カスタムパイプを作成します。 $ nest g pipe pipe/Jo…

もう2023年になったので、今さらNestJSに入門しようと思う - その11

前回 takasehiromichiex.com パイプ パイプは、@Injectable()デコレータがつけられたクラスで、PipeTransformインターフェースを実装します。 パイプは、2通りの使用例があります。 transformation 入力データを目的の形式に変換します。文字列から整数へな…

もう2023年になったので、今さらNestJSに入門しようと思う - その10

前回 takasehiromichiex.com 組み込みのHTTP例外 Nestは、一連の標準例外を提供しています。 BadRequestException UnauthorizedException NotFoundException ForbiddenException NotAcceptableException RequestTimeoutException ConflictException GoneExce…

もう2023年になったので、今さらNestJSに入門しようと思う - その9

前回 takasehiromichiex.com 例外フィルタ 例外フィルタは、Nest組み込みのレイヤーで、アプリケーション全体で未処理の例外を全て処理します。 アプリケーションコードによって例外が処理されない場合に、例外フィルタでキャッチされ、適切な応答が自動的に…

もう2023年になったので、今さらNestJSに入門しようと思う - その8

前回 takasehiromichiex.com ミドルウェアコンシューマ MiddlewareConsumer は、ヘルパクラスです。ミドルウェアを管理するための組み込みメソッドがいくつか用意されています。 forRoutes()メソッドは、 単一の文字列 複数の文字列 RouteInfoオブジェクト …

もう2023年になったので、今さらNestJSに入門しようと思う - その7

前回 takasehiromichiex.com ミドルウェア ミドルウェアは、ルートハンドラの前に呼び出されるメソッドです。 主に、リクエスト、レスポンスに干渉することができます。 Nestのミドルウェアは、デフォルトではExpressのミドルウェアと同等です。 では、ミド…

もう2023年になったので、今さらNestJSに入門しようと思う - その6

前回 takasehiromichiex.com プロバイダ Nestのクラスの多くは、プロバイダです。 プロバイダは、サービス、リポジトリ、ファクトリ、ヘルパなどがあります。 プロバイダは、依存関係として注入できる側面があります。 依存関係の注入を、Nestのランタイムに…

もう2023年になったので、今さらNestJSに入門しようと思う - その5

前回 takasehiromichiex.com コントローラのリダイレクト コントローラでリダイレクトさせるには、@Redirect()デコレータを使用します。 @Redirect()デコレータは、urlとstatusCodeを引数に取りますが、どちらも必須ではありません。 statusCodeを省略した場…

もう2023年になったので、今さらNestJSに入門しようと思う - その4

前回 takasehiromichiex.com コントローラ POSTを受け取るメソッドも定義してみましょう。 src/cats/cats.controller.ts import { Controller, Get, Post } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() hello(): stri…

もう2023年になったので、今さらNestJSに入門しようと思う - その3

前回 takasehiromichiex.com コントローラ コントローラは、アプリケーションに対する特定の要求を受け取ります。コントローラは、複数のルーティングを持ちます。 src/cats/cats.controller.tsを編集してみましょう。 src/cats/cats.controller.ts import {…

もう2023年になるので、今さらNestJSに入門しようと思う - その2

前回 takasehiromichiex.com モジュールについて まずモジュールは、main.tsのbootstrapで、NestFactory.create(AppModule)で、ルートモジュールとして利用します。 機能モジュール 特定の機能に関連するコードを整理し、明確な境界を確立するようです。 CLI…

もう2023年になるので、今さらNestJSに入門しようと思う - その1

こんにちは。高瀬です。 ずっとやろうやろうと思っていたのですが、そろそろ2023年になってしまうので、重い腰を上げて、いい加減にNestJSに入門しようと思います。 公式サイト nestjs.com NestJSについて フロントエンドのAngularに大きく影響を受けたバッ…