Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8844

Nest.jsのコンポーネント概要 ~~ コントローラ・プロバイダ編 ~~

$
0
0

Nest.js概要

Node.jsのフレームワーク
typescriptで構成され、HttpサーバとしてExpressを使用している。
オプションでFastifyも使用可能。
Babelを使用することで、JavaScriptでも書けるようになる(らしい)

記事の目的

Nest.jsを使う必要が出てきたため、フレームワーク自体と各コンポーネントにおける思想の確認。
使ってみると便利なので、数少ない日本語ドキュメントの助けになれば幸いです。

主なコンポーネント一覧

  • Controllers
  • Providers
  • Modules
  • Middleware
  • Exception filters
  • Pipes
  • Guards
  • Interceptors
  • Custom decorators

今回は、コントローラ(Controllers)とプロバイダ(Providers)に絞って記載します。

ファイル構造(イメージ)

 cats--- cats.controller.ts
     |
     |-- cats.service.ts
     |
     |-- cats.module.ts
     |
     |-- interface -- cats.interface.ts

コントローラ(Controllers)

概要


コントローラは受け取ったリクエストとクライアントへレスポンスを返すことに責任を持つ。
Controllersより抜粋。


  • アプリケーションへの特定のリクエストを受け取ることを目的とするプレゼンテーション層のコンポーネント。
  • 各コントローラは一つ以上のルートを持つ。
  • ルーティングメカニズムによってどのコントローラにリクエストが受け渡されるかが決まる。
  • ファイル名はオブジェクト名.controllers.ts
  • nest-cliの nest g co コントローラ名で生成できる

サンプルコード

cats.controller.ts
import{Controller,Get}from'@nestjs/common'import{CatsService}from'./cats.service'// デコレータで最上位階層を指定する。@Controller('cats')exportclassVatsController{// 次項目のプロバイダで解説。constructor(privatecatsService:CatsService){}// http://example.com/cats に来たgetがルーティングされる。@Get()findAll():string{return'このアクションはこの文字列を返す。'}// http://example.com/cats/create に来たpostがルーティングされる。@Post('create')// リクエストボディは@Bodyで取得可能asynccreate(@Body()body){// サービス(Services)については次項目に記載。// Dtoを作ればもっと簡略化が可能。(今後記事を書くかもしれません。)returnthis.catsService.create({name:body.name,age:body.age,breed:body.breed})}}

イメージ図

Controllers_1.png
公式ドキュメントControllersの記事より

プロバイダ(Providers)

概要

  • Nestの基本的な概念で、Injectable()でデコレートされたもの。
  • サービス、リポジトリ、ファクトリ、ヘルパーなどがプロバイダとして扱われる。
  • プロバイダの特徴として、依存関係を注入(Inject)できることにある。   ### サンプルコード(Service)
cats.service.ts
import{Injectable}from'@nestjs/common'import{Cat}from'./interfaces/cat.interface'@Injectable()exportclassCatsService{// Catインターフェイスの配列を初期化privatereadonlycats:Cat[]=[]create(cat:Cat){this.cats.push(cat)}findAll():Cat[]{returnthis.cats}}
interfaces/cat.interface.ts
exportinterfaceCat{name:string;age:number;breed:string;}
cats.module.ts
import{Module}from'@nestjs/common'import{CatsController}from'./cats.controller'import{CatsService}from'./cats.service'@Module({imports:[],controllers:[CatsController],providers:[CatsService],exports:[]})

解説(ざっくり)

constructor(privatecatsService:CatsService){}

コントローラのサンプルコードの上記部分でコントローラにサービスクラスを注入している。
また、そこのリレーションをつなげるためには、Moduleファイルにリレーションを登録しておく必要がある。

イメージ図

Components_1.png
公式ドキュメントProvidersの記事より

参考


Viewing all articles
Browse latest Browse all 8844

Trending Articles