1
1

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 3 years have passed since last update.

NestJS+TypeORMでバックエンド構築 PART1 【インストール、RESTAPI実装】

Last updated at Posted at 2021-08-05

大体公式ドキュメントの通りに実装していきます。

-1- 準備編

1.nestjsをインストールしてプロジェクトを作成します。

nestjsのインストールとプロジェクト作成
 npm i -g @nestjs/cli 
 nest new project-name

2.プロジェクトを開いて必要なパッケージをインストールします。

プロジェクトに必要なnpmパッケージをインストール
  npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata
  npm i --save @nestjs/typeorm typeorm mysql2

3. プロジェクトのルートディレクトリにormconfig.jsonを作成

後ほどER図の自動作成をしたいので、ormconfig.jsonを使ってDBの情報を渡します。

ormconfig.json
{
  "type": "mysql",
  "host": "localhost",
  "port": 3305,
  "username": "root",
  "password": "root",
  "database": "test",
  "entities": ["dist/**/*.entity{.ts,.js}"],
  "synchronize": true
}

4.mysqlのコンテナを3305番ポートで起動させます

3305番ポートでmysqlコンテナを起動
docker run -it \
-e MYSQL_DATABASE=test \
-e MYSQL_ROOT_PASSWORD=root \
-p 3305:3306 \
-d mysql

-2- 構築編

-1- app.module.tsを編集

app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import {TypeOrmModule} from "@nestjs/typeorm";
@Module({
  imports: [TypeOrmModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

-2- UsersModuleをCLIで作成

nest g module users
nest g service users
nest g controller users

usersという名前のディレクトリがCLIによってsrcの中に作成されます。
ついでに、ルーティングのためのコントローラーとコントローラーから呼び出されて処理をするサービスも作成しておきます。

-3- user.entity.tsを作成して編集

usersディレクトリの中にuser.entity.tsを作成します。こちらはCLIで作成することができないので、手動で作成してください。

user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;
  @Column()
  firstName: string;
  @Column()
  lastName: string;
  @Column({ default: true })
  isActive: boolean;
}

-4- users.module.tsを編集

CLIによって自動的にprovidersとcontrollerが追加されているので、編集が必要なのはTypeORM関係のみです。

users.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { User } from './user.entity';
@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UsersService],
  controllers: [UsersController],
})
export class UsersModule {}

-5- users.service.tsを編集

users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}
  findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }
  findOne(id: string): Promise<User> {
    return this.usersRepository.findOne(id);
  }
  async remove(id: string): Promise<void> {
    await this.usersRepository.delete(id);
  }
}

-6- users.controller.tsを編集

users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}
  findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }
  findOne(id: string): Promise<User> {
    return this.usersRepository.findOne(id);
  }
  async remove(id: string): Promise<void> {
    await this.usersRepository.delete(id);
  }
}

-3- 確認編

ここまで終わったらあと一息です!

-1- プロジェクト起動

npm run start:dev

※devをつけるとファイルの変更をした場合に検知して、勝手に再実行してくれるので便利です。

-2- データベース確認

Workbenchでデータベースを確認すると、testデータベースの中にuserテーブルが出来ていることが確認できます。また、RESTAPIをテストするためにUserテーブルに適当にデータを入れておきます。

image.png

-3- RESTAPI確認

RESTAPIも正常に動作しています。
image.png

まとめ

ここまでのソースはこちら

part2でTypeORMのリレーションの実装とER図の自動作成を行います。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?