백엔드

mongodb / mongoose dbConnect

developerYoung 2022. 2. 20. 16:49
반응형

오늘은 noSQL중 하나인 mongoDB를 Nextjs server와 연동해보려 합니다!

 

한 번은 mongoDB도 사용해봐야겠죠?!

 

아래의 방법으로 mongoDB를 nodejs를 connect 할 수 있습니다.

 

이것을 통해 조회하는 방법은 앞으로 차차 적어보도록 하고 연결 스크립트만 알아보도록 할게요!

// mongoose dbConnect
import mongoose from 'mongoose';

const MONGODB_URI = process.env.MONGODB_URI;

if (!MONGODB_URI) {
  throw new Error(
    'Please define the MONGODB_URI environment variable inside .env.local',
  );
}

let cached = global.mongoose;

if (!cached) {
  cached = global.mongoose = { conn: null, promise: null };
}

export async function dbConnect() {
  if (cached.conn) {
    return cached.conn;
  }

  if (!cached.promise) {
    const opts = {
      useNewUrlParser: true,
      bufferCommands: false,
    };

    cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
      return mongoose;
    });
  }
  cached.conn = await cached.promise;
  return cached.conn;
}

먼저 위의 스크립트는 mongoose를 이용한 방식이고, 아래는 mongodb를 이용하는 방식입니다!

 

요새는 mogoose를 많이쓰기때문에 위의 스크립트를 복붙해주시면 돼요!

 

아! 그리고 .env.local 파일을 생성하여 이곳에 MONGODB_URL을 적어주셔야해요!

물론 .env.local 파일은 gitignore에서 git에 푸쉬되지 않도록 막아줘야하구요!! 필수!!

 

// mongodb dbConnect
import { MongoClient } from 'mongodb';

const MONGODB_URI = process.env.MONGODB_URI;
const MONGODB_DB = process.env.MONGODB_DB;

if (!MONGODB_URI) {
  throw new Error(
    'Please define the MONGODB_URI environment variable inside .env.local',
  );
}

if (!MONGODB_DB) {
  throw new Error(
    'Please define the MONGODB_DB environment variable inside .env.local',
  );
}

let cached = global.mongo;

if (!cached) {
  cached = global.mongo = { conn: null, promise: null };
}

export async function connectToDatabase() {
  if (cached.conn) {
    return cached.conn;
  }

  if (!cached.promise) {
    const opts = {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    };

    cached.promise = MongoClient.connect(MONGODB_URI, opts).then((client) => {
      return {
        client,
        db: client.db(MONGODB_DB),
      };
    });
  }
  cached.conn = await cached.promise;
  return cached.conn;
}
 

 

 

반응형