[TIL_2023.11.02] Node.js_mongoose 라이브러리 사용

김효진·2023년 11월 2일
0

Node.js 입문주차에 들어서 데이터베이스 중 비관계형 데이터베이스인 MongoDB를 배우고 있다.
mongoose는 MongoDB

MongoDB ODM 중 가장 유명한 라이브러리인데
데이터베이스 연결, 스키마 정의, 스키마에서 모델로 변환, 모델을 이용해 데이터를 다루고 프로미스와 콜백 등 자바스크립트 언어로 사용 가능하다.

사용법

-> npm 공식문서 : https://www.npmjs.com/package/mongoose
-> mongoose docs : https://mongoosejs.com/docs/guides

  1. 콘솔에 해당 명령어를 입력해 라이브러리를 설치한다.
$npm install mongoose
  1. schema 폴더를 만들어 그 안에 index.js파일(파일명은 상황에 맞게 설정)을 만들고 아래 코드를 작성한다.
const mongoose = require('mongoose')

const connect = () => {
  mongoose
    .connect('mongodb://root:[설정한 비밀번호]@localhost:27017/admin', {
      dbName: '[원하는 db명]',
      useNewUrlParser: true,
    })
    .then(() => {
      console.log('몽고디비 연결 성공')
    })
    .catch((err) => {
      console.log('몽고디비 연결 에러', err)
    })
}

mongoose.connection.on('error', (error) => {
  console.error('몽고디비 연결 에러', error)
})
mongoose.connection.on('disconnected', () => {
  console.error('몽고디비 연결이 끊겼습니다. 연결을 재시도합니다.')
})

module.exports = connect
  1. app.js(메인서버파일)에서 2에서 만든 몽구스파일 연결 (CommonJS 방식의 모듈은 뒤에 index.js 생략이 가능)
// app.js(메인서버파일)
const connect = require('./schemas') 
  1. 각 필요에 맞는 스키마를 만든다. (예를들어 post 스키마를 만든다면)
// 스키마 폴더 > post.js

const mongoose = require('mongoose')

const { Schema } = mongoose
const postSchema = new Schema({
  title: {
    type: String,
    required: true,
  },
  name: {
    type: String,
    required: true,
  },
  password: {
    type: Number,
    required: true,
  },
  content: {
    type: String,
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
})

module.exports = mongoose.model('Post', postSchema)
// exports 까지 해줘야 다른 파일에서 사용 가능함.
  1. 4에서 만든 스키마 파일을 이용해 만들 라우터를 만든다.
// routes 폴더 > posts.js (routes 파일 이름은 보통 복수형으로 쓴다고 한다)

const express = require('express')
// 아래와 같이 만들어 놓은 스키마를 require 해서 사용한다 
const Post = require('../schemas/post') 

// ~~ 본인 상황에 맞는 필요한 코드를 작성~~ 
  1. 만든 라우터를 메인 서버(app.js)에 require 후 미들웨어로 사용하면 됨 -> 경로는 본인이 원하는 설계에 따라 셋팅하기
// app.js

const postsRouter = require('./routes/posts')

~~ 

app.use('/posts', postsRouter)
profile
더 많은 사람들이 더 좋은 정보와 서비스를 누릴 수 있게!!

0개의 댓글