NestJS에서 Prisma 릴리즈에 대한 질의 내보내기
또한 집필 환경의 의존 모듈 버전은 다음과 같다.버전 차이로 인한 문제 양해 부탁드립니다.
package.json
"dependencies": {
"@nestjs/common": "^8.0.0",
"@nestjs/core": "^8.0.0",
"@prisma/client": "^3.11.1",
"prisma": "^3.11.1"
}
Prisma on NestJS의 초기 모델
NestJS에서 Prisma를 사용할 때 실례화하지 않고 서비스로 정의하여 각각의 모듈에서 사용합니다.DB 연결을 시도하는 라이프 사이클 이벤트
onModuleInit
의 정의는 현재 선택적이며 이후의 해설을 위해 정의됩니다.apps/api/src/prisma.service.ts
import {
Injectable,
OnModuleInit,
} from '@nestjs/common';
import { PrismaClient, Prisma } from '@prisma/client';
@Injectable()
export class PrismaService
extends PrismaClient
implements OnModuleInit
{
async onModuleInit() {
await this.$connect();
}
}
로그 설정
이 모형에 대해서는 다음과 같이 추가로 설치하면 된다.
Logger 인스턴스
@nestjs/common
확보super
로g 출력 지정onModuleInit
에 이벤트 청취자 등록this.$on
유형 오류가 발생할 수 있습니다.이 오류는 extends PrismaClient
를 extends PrismaClient<Prisma.PrismaClientOptions, Prisma.LogLevel>
로 수정하여 확장this.$on
의 유형 추론을 할 수 있습니다.apps/api/src/prisma.service.ts
import {
Injectable,
OnModuleInit,
+ Logger,
} from '@nestjs/common';
import { PrismaClient, Prisma } from '@prisma/client';
@Injectable()
export class PrismaService
- extends PrismaClient
+ extends PrismaClient<Prisma.PrismaClientOptions, Prisma.LogLevel> // <- here
implements OnModuleInit
{
+ private readonly logger = new Logger(PrismaService.name);
+ constructor() {
+ super({ log: ['query', 'info', 'warn', 'error'] });
+ }
async onModuleInit() {
+ this.$on('query', (event) => {
+ this.logger.log(
+ `Query: ${event.query}`,
+ `Params: ${event.params}`,
+ `Duration: ${event.duration} ms`,
+ );
+ });
+ this.$on('info', (event) => {
+ this.logger.log(`message: ${event.message}`);
+ });
+ this.$on('error', (event) => {
+ this.logger.log(`error: ${event.message}`);
+ });
+ this.$on('warn', (event) => {
+ this.logger.log(`warn: ${event.message}`);
+ });
await this.$connect();
}
}
이렇게 발행된 조회가 출력되었습니다. (예는 PostgreSQL)prisma:query SELECT "public"."Post"."id", "public"."Post"."title", "public"."Post"."content", "public"."Post"."published", "public"."Post"."authorId" FROM "public"."Post" WHERE "public"."Post"."authorId" IN ($1) OFFSET $2
[Nest] 46661 - 04/01/2022, 1:02:35 PM LOG [PrismaService] Query: SELECT "public"."Post"."id", "public"."Post"."title", "public"."Post"."content", "public"."Post"."published", "public"."Post"."authorId" FROM "public"."Post" WHERE "public"."Post"."authorId" IN ($1) OFFSET $2
[Nest] 46661 - 04/01/2022, 1:02:35 PM LOG [PrismaService] Params: [3,0]
[Nest] 46661 - 04/01/2022, 1:02:35 PM LOG [PrismaService] Duration: 3 ms
참고 자료
Reference
이 문제에 관하여(NestJS에서 Prisma 릴리즈에 대한 질의 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/takepepe/articles/nestjs-prisma-logger텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)