📝
Nestのコントローラーやマイグレーションなどを勉強
今回は NestJsとNextでAPI通信するためにControllerやmigrationのことをメモにしました。
Nestとは
Node.js上で動作するフレームワーク
Expressがコアとして作られおり、基本的にはTypeScript
Controllerの生成
そもそもコントローラーって.....?
アプリケーションから特定の要求を受信し、そのリクエストを制御する
npx nest g controller User
src/userにcontrollerファイルを作れます。
本来はコントローラーは作った後にapp.moduleに追記しないといけないのですが nest g で作った際には自動でおこなってくれています。おこなってくれています。
import { Controller, Get } from '@nestjs/common';
@Controller('user')
export class UserController {
@Get('UserList')
getUserList() {
return [
{
id: 1,
name: 'test',
email: 'test@test.com',
password: 'password',
},
];
}
}
試しにこの様に書いてみて
npm run start
そしたらこちら
で確認できます。
migration
マイグレーションをする前に Prismaをセットアップします
Prisma
npm i prisma
インストールが終わったら
npx prisma init
でセットアップします
そしたら
.envがファイルができていると思うので
# Environment variables declared in this file are automatically made available to Prisma.
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
こちらをご自身のpostgresや mysqlの設定のやつに書き換えます。
テーブル作成
.envファイルに記載が終わったらテーブルの作成をやっていきます。
先ほどの、プリズマのコマンドを実行時にPrisma/schema.prismaが出来ていると思うので、そちらに
model User{
id Int @id @default(autoincrement())
name String
Email String @unique
Password String
}
この様にUserテーブルを宣言してあげます。
書き終えたら、
npx prisma migrate dev --name user
と実行します。
DataBaseと連携
次にデータベースとの連携をしていこうと思います。
npm i @prisma/client
でprismaClientをインストールした後に
npx nest g service primsa
import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
}
}
prisma.serviceにこの様にかき
import { Controller, Get } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
@Controller('user')
export class UserController {
constructor(private prisma: PrismaService) {}
@Get('UserList')
async getUserList() {
const result = await this.prisma.user.findMany();
return [...result];
}
}
Controller側にSericeを宣言してあげて、getUserList中でuserテーブルに対してデータ取得を行いそれをreturn してあげることで、 データのカラムは帰ってきます。
Discussion