0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Nestjs使い方 個人メモ

Last updated at Posted at 2022-06-06

Nestjs概要

  • 疎結合で管理され、決まったアーキテクチャで構成されるフレームワーク
  • 複数で開発する時管理がしやすい

インストール

  • nestコマンドを使えるようにグローバルにインストール
npm i -g @nestjs/cli
  • nestコマンドを使ってプロジェクトを作成
nest new nestjs-practice

起動

  • 単純なサーバーの起動
npm run start
  • ファイルの監視付きサーバー起動
npm run start:dev

コントローラー(controller)

  • ルーティングをしてくれる役割
  • パス・メソッドを設定できる
  • controllerファイルで記述される
import { Controller, Get } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  //メソッド
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}
  • ファイルの自動生成
nest g controller <ファイル名>
@Controller('cats')
export class CatsController {
  @Get()
  findAll(@Req() request: Request): string {
    return 'This action returns all cats';
  }
}

プロバイダー(provider)

  • より複雑な処理を定義する場所
  • 依存関係の挿入が可能
  • serviceファイルで記述される
  • @Injectable()デコレータを使用
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}
  • サービスファイルに記述された関数を使うのはcontrollerファイル(下記はcontrollerに記述)
  • コンストラクターに型として記述するとそれ以降で使用可能
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
//型定義ファイル
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  //依存関係を挿入
  constructor(private catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

モジュール(module)

  • アプリケーション構造を整理するためのもの
  • moduleファイルで記述する
  • モジュール同士は自動で関連付けされる
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

リゾルバー(resolver)

  • QraphQLで使うことができる。
  • @Query@Mutationといったデコレータを使うことで、参照や更新処理を受け付ける。
  • serviceファイルを読み込んで使う。
@Resolver(() => User)
export class UsersResolver {
  constructor(private readonly userService: UsersService) {}

  @Query(() => User)
  user(@Args() args: FindFirstUserArgs) {
    return this.userService.findFirst(args)
  }

  @Mutation(() => User)
  async createUser(@Args() args: CreateOneUserArgs) {
    args.data.password = await bcrypt.hash(args.data.password, 10)
    return this.userService.createUser(args)
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?