Agik Setiawan - January 05, 2023

NestJS Prisma Multi Connections

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:abcdefghij@clusterkp01.lhfibge.mongodb.net/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",
      }
    }
  }
}

Repository:


https://github.com/mister-coding/basic-crud-nestjs

Branch: multi-connection

Share


Comments