たぶん、laravelバックエンドの代わりに、
nest.jsを使ったバックエンドに置き換わっていく時代が来ます。
本日はnest.jsの最小単位のプロジェクトコードを紹介します。
npm init -y
npm install @nestjs/core @nestjs/common rxjs
main.ts
ファイルの作成import { NestFactory } from '@nestjs/core';
import { Module, Controller, Get } from '@nestjs/common';
@Controller() // デフォルトルート
class AppController {
@Get()
getHello(): string {
return 'Hello World!';
}
}
@Module({
controllers: [AppController],
})
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
node main.ts
これで、ブラウザで http://localhost:3000
にアクセスすると、「Hello World!」が表示されます。
ですよね。
npm init -y
npm install @nestjs/core @nestjs/common @nestjs/prisma @prisma/client @nestjs/config rxjs
npx prisma init
prisma/schema.prisma
ファイルを編集して、ブログのデータモデルを定義します。generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite" // SQLiteを使用しますが、他のDBMSもサポートしています
url = "file:./dev.db"
}
model Post {
id Int @id @default(autoincrement())
title String
content String
createdAt DateTime @default(now())
}
bashコードをコピーするnpx prisma migrate dev --name init
src/prisma.service.ts
ファイルを作成し、Prismaクライアントを管理するサービスを実装します。
import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
async onModuleInit() {
await this.$connect();
}
async onModuleDestroy() {
await this.$disconnect();
}
}
src/blog/blog.service.ts
を作成し、ブログの一覧を取得するサービスを実装します。import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma.service';
@Injectable()
export class BlogService {
constructor(private prisma: PrismaService) {}
async getPosts() {
return this.prisma.post.findMany();
}
}
src/blog/blog.controller.ts
を作成し、ブログの一覧を返すエンドポイントを定義します。import { Controller, Get } from '@nestjs/common';
import { BlogService } from './blog.service';
@Controller('blog')
export class BlogController {
constructor(private readonly blogService: BlogService) {}
@Get()
async getPosts() {
return this.blogService.getPosts();
}
}
src/blog/blog.module.ts
を作成し、モジュールを定義します。
import { Module } from '@nestjs/common';
import { BlogService } from './blog.service';
import { BlogController } from './blog.controller';
import { PrismaService } from '../prisma.service';
@Module({
controllers: [BlogController],
providers: [BlogService, PrismaService],
})
export class BlogModule {}
src/app.module.ts
を編集して、BlogModuleをインポートします。
import { Module } from '@nestjs/common';
import { BlogModule } from './blog/blog.module';
@Module({
imports: [BlogModule],
})
export class AppModule {}
Nest.jsを起動します。
npm run start
ブラウザで http://localhost:3000/blog
にアクセスすると、Prismaデータベースに保存されたブログの投稿一覧が表示されます。
npx prisma studio
でPrisma Studioを使い、データを確認・編集できます。