NestJS Prisma Multi Connections
Agik Setiawan
Full Stack Developer
April 4th 2023
Prisma adalah Modern ORM yang memungkinakan kita membuat koneksi dan Query ke database menjadi lebih mudah dan lebih sederhana di bandingkan kalau kita tanpa menggunakan ORM.
Pada tutorial ini, saya kan membagikan contoh bagaimana cara membuat multi koneksi database menggunakan Prisma ORM dengan mudah dan sederhana. disini saya akan menggunakan contoh database MySQL dan Mongo DB untuk koneksi databasenya. pastikan kita sudah bisa membuat koneksi database terlebih dahulu atau silahkan baca Membuat CRUD Nest JS untuk lebih detailnya.
Pada tutorial CRUD sebelumnya kita sudah berhasil membuat koneksi database menggunakan Prisma, selanjutanya pada tutorial ini kita kan menambahkan satu koneksi database lagi yaitu MongoDB. kita bisa membuat database MongoDB secara gratis di MongoDB Cloud.
Setelah kita memiliki koneksi database MongoDB selanjutnya kita buat satu folder "db" dalam root Project kemudian di dalamnya terdapat folder "mongo/schema.prisma" yang akan kita gunakan untuk membuat skema Mongo DB.
Kemudian buatlah skema dengan contoh seperti dibawah ini:
generator client {
provider = "prisma-client-js"
output = "../../node_modules/@db_prisma/mongo"
}
datasource db {
provider = "mongodb"
url = env("MONGODB_URL")
}
model biodata {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
email String
}
Kemudian edit file .env dan tambahkan 'MONGODB_URL' di dalamnya yang berisi koneksi database mongodb
DATABASE_URL="mysql://root:mysql@localhost:3307/nestjs_crud"
MONGODB_URL='mongodb+srv://test:[email protected]/test_mongodb'
Kemudian edit file 'src/prisma/prisma.service' menjadi seperti di bawah ini:
import { INestApplication, Injectable, OnModuleInit } from "@nestjs/common"
import { PrismaClient } from "@prisma/client"
import { PrismaClient as PrismaClientMongo } from "@db_prisma/mongo"
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect()
}
async enableShutdownHooks(app: INestApplication) {
this.$on("beforeExit", async () => {
await app.close()
})
}
}
@Injectable()
export class PrismaServiceMongo
extends PrismaClientMongo
implements OnModuleInit
{
async onModuleInit() {
await this.$connect()
}
async enableShutdownHooks(app: INestApplication) {
this.$on("beforeExit", async () => {
await app.close()
})
}
}
Kemudian tambahkan class 'PrismaServiceMongo' ke dalam 'prisma.module'
import { Global, Module } from "@nestjs/common"
import { PrismaService, PrismaServiceMongo } from "./prisma.service"
@Global()
@Module({
providers: [PrismaService, PrismaServiceMongo],
exports: [PrismaService, PrismaServiceMongo],
})
export class PrismaModule {}
Kemudian kita generate skema koneksi database Mongo DB dengan menjalankan perintah
yarn prisma generate --schema ./db/mongo/schema.prisma
Pada tahap ini kita sudah berhasil menambah satu koneksi database baru yaitu Mongo DB ke dalam project Nest JS, selanjutanya kita akan panggil service Mongo DB ke dalam service lain.
import { Injectable } from "@nestjs/common"
import { PrismaServiceMongo } from "src/prisma/prisma.service"
import { CreateBiodataMongoDto } from "./dto/create-biodata-mongo.dto"
import { UpdateBiodataMongoDto } from "./dto/update-biodata-mongo.dto"
@Injectable()
export class BiodataMongoService {
constructor(private dbMongo: PrismaServiceMongo) {}
async create(createBiodataMongoDto: CreateBiodataMongoDto) {
const createBiodata = await this.dbMongo.biodata.create({
data: createBiodataMongoDto,
})
if (createBiodata) {
return {
statusCode: 200,
message: "success",
}
}
}
}
https://github.com/mister-coding/basic-crud-nestjs
Branch: multi-connection
Artikel Terkait
© 2023 PT Koding Digital Indonesia. All rights reserved