高瀬博道の技術ブログ

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

TypeScript

TypeORMに入門する - 12

前回 takasehiromichiex.com カスケードを使用して関連オブジェクトを自動的に保存する方法 @OneToOne デコレータのオプションにカスケードを設定します。 src/entity/Photo.ts import { Column, Entity, OneToOne, PrimaryGeneratedColumn } from "typeorm"…

TypeORMに入門する - 11

前回 takasehiromichiex.com オブジェクトとそのリレーションのロード PhotoとPhotoMetadataを一つのクエリで読み込みます。 src/index.ts import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initiali…

TypeORMに入門する - 10

前回 takasehiromichiex.com 関係の逆側 PhotoMetadataからPhotoへのリレーションは貼れていますが、Photoから PhotoMetadataへのリレーションは貼れていません。 リレーションを双方向にするためにエンティティを変更しましょう。 src/entity/Photo.ts impo…

TypeORMに入門する - 9

前回 takasehiromichiex.com 1対1の関係を保存する データを保存してみましょう。 src/index.ts import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; import { PhotoMetadata } from "./entity/PhotoMetadata"; AppDat…

TypeORMに入門する - 8

前回 takasehiromichiex.com PhotoMetadataの作成 新しいモデルを作成してみます。 src/entity/PhotoMetadata.ts import { Photo } from "./Photo"; export class PhotoMetadata { id: number; height: number; width: number; oriientation: string; compre…

TypeORMに入門する - 7

前回 takasehiromichiex.com Photoの更新 データベースからPhotoを取得して、更新して保存してみます。 src/index.ts import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initialize() .then(async () …

TypeORMに入門する - 6

前回 takasehiromichiex.com リポジトリの使用 今度は、リポジトリを使用するようにしてみます。 src/index.ts import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initialize() .then(() => { console…

TypeORMに入門する - 5

前回 takasehiromichiex.com Photoの作成 Photoを作成してデータベースに保存してみます。 src/index.ts import { AppDataSource } from "./data-source"; import { Photo } from "./entity/Photo"; AppDataSource.initialize() .then(() => { console.log("…

TypeORMに入門する - 4

前回 takasehiromichiex.com DataSourceの作成 エンティティが完成したら、DataSourceを作成します。 src/data-source.ts import "reflect-metadata"; import { DataSource } from "typeorm"; import { Photo } from "./entity/Photo"; export const AppData…

TypeORMに入門する - 3

前回 takasehiromichiex.com モデルの作成 ステップバイステップで進んでみましょう。 データベースの操作は、テーブルの作成から始まります。 テーブル = モデルです。 モデルを作成してみます。 src/entity/Photo.ts export class Photo { id: number; nam…

TypeORMに入門する - 2

前回 takasehiromichiex.com モデルの作成 クイックスタートを使用したので、モデルは以下の通りになっています。 src/entity/User.ts import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; @Entity() export class User { @PrimaryGenerated…

TypeORMに入門する - 1

概要 次何書こうかな〜とか思ったり、連載形式やめようかな〜とか思ったりしましたが、結局連載形式にしちゃいました。 今回はTypeORMにちゃんと入門しようと思います。 公式 typeorm.io TypeORMについて TypeORMは、NodeJS、Browser、Cordova、PhoneGap、Io…

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 入力データを目的の形式に変換します。文字列から整数へな…