NestJS+TypeORMでバックエンド構築 PART1 【インストール、RESTAPI実装】
大体公式ドキュメントの通りに実装していきます。
-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を作成
npm i -g @nestjs/cli
nest new project-name
npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata
npm i --save @nestjs/typeorm typeorm mysql2
後ほどER図の自動作成をしたいので、ormconfig.jsonを使ってDBの情報を渡します。
{
"type": "mysql",
"host": "localhost",
"port": 3305,
"username": "root",
"password": "root",
"database": "test",
"entities": ["dist/**/*.entity{.ts,.js}"],
"synchronize": true
}
4.mysqlのコンテナを3305番ポートで起動させます
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
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 {}
nest g module users
nest g service users
nest g controller users
usersという名前のディレクトリがCLIによってsrcの中に作成されます。
ついでに、ルーティングのためのコントローラーとコントローラーから呼び出されて処理をするサービスも作成しておきます。
-3- user.entity.tsを作成して編集
usersディレクトリの中にuser.entity.tsを作成します。こちらはCLIで作成することができないので、手動で作成してください。
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関係のみです。
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を編集
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を編集
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テーブルに適当にデータを入れておきます。
-3- RESTAPI確認
まとめ
ここまでのソースはこちら
part2でTypeORMのリレーションの実装とER図の自動作成を行います。
Author And Source
この問題について(NestJS+TypeORMでバックエンド構築 PART1 【インストール、RESTAPI実装】), 我々は、より多くの情報をここで見つけました https://qiita.com/ms2geki/items/6bf1f1740ed1b8bd9905著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .