
【Prisma利用編】NestJSとPrisma
Prismaのセットアップが完了したら、Prismaを実際に利用するための細かい設定を加えていく。ここでは、Prismaの機能(要はDB操作)を実行するモジュールとしてPrismaModuleを作成し、他のfeatureモジュールでも利用できるように公開する。
Prismaモジュールの作成
nestcliで以下を実行する。
$ nest g mo prisma
$ nest g s prisma // テストファイルが不要であれば末尾に--no-specをつける
実行すると、次のようにディレクトリとファイルが作成される。
プロジェクト名
├── node_modules
├──── src
│ │ └── prisma // 追加
│ │ └── prisma.module.ts // 追加
│ │ └── prisma.service.ts // 追加
│ ├── app.controller.spec.ts
│ ├── app.controller.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
略
prisma/prisma.service.tsの変更
環境変数のDATABASE_URLを取得してDBと接続する。下記でインポートされている継承元クラスであるPrismaClientは、createやdeleteなどのメソッドを持ったクラス。
// prisma/prisma.service.ts
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config'; // 環境変数を扱うためのService
import { PrismaClient } from '@prisma/client'; // PrismaServiceにはPrismaClientを継承させる
@Injectable()
export class PrismaService extends PrismaClient {
// 環境変数からDBのURLを取得したいので、nestjが提供しているConfigServiceをDIする
constructor(private readonly config: ConfigService) {
super({
datasources: {
db: {
url: config.get('DATABASE_URL'),
},
},
});
}
}
prisma/prisma.module.tsの変更
他のfeatureモジュールでも利用できるよう、exportsに追加して公開する。
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service'; // 変更したPrismaServiceをインポートする
@Module({
providers: [PrismaService],
exports: [PrismaService], // PrismaServiceを利用したいモジュールで利用できるよう、エクスポートする
})
export class PrismaModule {}
PrismaModuleを利用したいfeatureモジュールでインポートする
Authモジュールで利用する例。auth/auth.module.tsで@Moduleデコレータ内のimportsプロパティでPrismaModuleを指定する。
import { Module } from '@nestjs/common';
import { AuthController } from './hoge.controller';
import { AuthService } from './hoge.service';
import { PrismaModule } from 'src/prisma/prisma.module'; // Prismaモジュールのインポート
@Module({
imports: [PrismaModule], // Prismaモジュールのインポート
controllers: [AuthController],
providers: [AuthService],
})
export class AuthModule {}