Node.js와 함께 MongoDB 사용.

소개



서버로 작업할 때 우리는 항상 데이터베이스를 사용하여 데이터를 저장하고 검색해야 합니다. 많은 서버측 언어와 데이터베이스가 있습니다. 이 기사에서는 Node.js와 함께 MongoDB를 사용하는 방법을 배웁니다.

MongoDB는 비관계형 데이터베이스입니다. 문서 중심의 스토리지 시스템입니다. 관계형 데이터베이스(MYSQL, PostgreSQL)에서 사용되는 기존 테이블 및 행 형식 대신 JSON 형식으로 데이터를 저장하고 검색합니다.

목표



이 가이드는 다음 사용 사례에 중점을 둡니다.
  • MongoDB 연결 문자열 가져오기
  • 간단한 책 목록 만들기

  • 전제 조건


  • 지원되는 Node.js 버전이 설치됨
  • MongoDB 아틀라스account
  • Node.js 및 Express.js에 대한 기본 지식

  • 시작하기



    Node.js와 함께 MongoDB를 사용하는 방법을 시연하기 위해 간단한 책 목록을 만들 것입니다. 인벤토리에서 책을 추가, 가져오기, 편집 및 제거하는 방법을 배웁니다.

    코드 편집기에 다음 폴더와 파일이 준비되어 있는지 확인하겠습니다.



    종속성 설치



    참고 사항:

    Mongoose is a library that creates a connection between MongoDB and an Express based application.

    Dotenv is used to load data from our config.env file into the environment so we can access it using process.env .



    계속해서 터미널에서 아래 명령을 실행하여 이 프로젝트에 필요한 종속성을 설치합니다.

    npm install express 
    npm install mongoose
    npm install  dotenv
    


    MongoDB 연결 문자열 검색



    Node.js 애플리케이션에서 데이터베이스에 연결하려면 MongoDB Atlasaccount에 로그인하십시오.

    연결 문자열을 검색하려면 다음의 간단한 단계를 따르십시오.
  • 데이터베이스 배포 대시보드에서 connect를 클릭합니다.


  • Connect to your application 옵션을 선택합니다.


  • 연결 문자열 복사



  • 자세히 알아보기



    이 시점에서 종속성과 연결 문자열을 사용할 준비가 되어 있어야 합니다.

    당분간 server.js 파일은 다음과 같아야 합니다.

    const express = require('express')
    const dotenv = require('dotenv')
    const path = require('path')
    const app = express()
    
    dotenv.config({path: './config/config.env'})
    app.use(express.json())
    
    const port = process.env.port
    app.listen(port, () => {
        console.log(`port ${port} connected...`)
    })
    

    config.env 파일을 예로 들어 보겠습니다. 이 파일은 모든 환경 변수를 포함합니다.

    port = 8080
    mongo_uri = mongodb+srv://mongodb-template:<password>@cluster0.8lmmv.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
    


    코드를 config.env 파일에 복사한 후 서버를 다시 시작하십시오.

    Replace <password> with the actual password of the database



    다음 단계에서는 db.js 파일에서 MongoDB 연결을 생성해 보겠습니다.

    const mongoose = require('mongoose')
    
    const connectDb = async () => {
    const conn = await mongoose.connect(process.env.mongo_uri,  {
    useNewUrlParser: true,
    useUnifiedTopology: true
    })
    console.log(`mongodb connected: ${conn.connection.host}`)
    }
    
    module.exports = connectDb
    
    


    이제 데이터베이스 연결이 준비되어 있으므로 server.js 파일을 업데이트합니다.

    const express = require('express')
    const dotenv = require('dotenv')
    const connectDb = require('./database/db')
    const app = express()
    
    dotenv.config({path:'./config/config.env'})
    app.use(express.json())
    
    //database connection
    connectDb()
    
    const port = process.env.port
    app.listen(port, () => {
        console.log(`port ${port} connected...`)
    })
    
    


    스키마 생성



    MongoDB Schema는 데이터베이스 구조의 모양과 저장할 수 있는 항목을 결정하는 데 도움이 되는 JSON 개체입니다.

    설정BookSchema.js:

    const mongoose = require('mongoose')
    
    const BookSchema = new mongoose.Schema({
        title:{
            type:String,
            required:true,
            unique:true
        },
        author:{
            type:String,
            required:true,
            unique:true
        },
        isbn:{
            type:String,
            unique:true
        }
    })
    
    module.exports = mongoose.model('BookSchema', BookSchema)
    
    


    노선


    book.js 파일에서 시작하여 routerBookSchema 모듈을 가져옵니다.

    const router = require('express').Router()
    const Book = require('../model/BookSchema')
    

    book.js 파일에는 다음 요청이 포함됩니다.


    POST 요청



    router.post('/', async (req,res) => {
        const { title, author, isbn } = req.body
        const newBook = await Book.create({ title, author, isbn })
        res.status(201).json({ 
            success:true, 
            data:newBook 
        })
    })
    


    위의 코드는 책의 name, author, and isbn를 저장합니다.


    GET 요청

    There will be two variants of the GET request. One will GET all books while the other will GET just a particular book.



    router.get('/',  async (req,res) => {
        const books = await Book.find()
        res.status(200).json({ 
            success:true, 
            data: books, 
            num: books.length
        })
    })
    
    router.get('/:id',  async (req,res) => {
      const book = await Book.findById(req.params.id)  
      res.status(200).json({ 
          success:true, 
          data: book 
        })
    })
    




    PUT 요청



    router.put('/:id', async (req,res) => {
        let book = await Book.findById(req.params.id)
        book = await Book.findByIdAndUpdate(req.params.id, {$set:req.body}, {
            new:true,
            runValidator:false
        })  
        res.status(200).json({ 
            success:true, 
            data: book 
        })
    })
    




    삭제 요청

    This operation will also have two variants in case we want to DELETE one or all entries from the database.



    router.delete('/:id', async (req,res) => {
        await Book.findByIdAndRemove(req.params.id)
        res.status(200).json({ 
            success:true, 
            data: 'book deleted' 
        })
    })
    
    router.delete('/', async (req,res) => {
        await Book.deleteMany()
       res.status(200).json({ 
           success:true, 
           data: 'All books deleted' 
        })
    })
    


    마지막으로 라우터를 내보냅니다.

    module.exports = router
    


    심호흡을 하세요. 이제 프로젝트가 거의 완료되었습니다.server.js 파일은 router 모듈로 업데이트되어야 합니다.

    const express = require('express')
    const dotenv = require('dotenv')
    const connectDb = require('./database/db')
    const app = express()
    
    dotenv.config({path:'./config/config.env'})
    app.use(express.json())
    
    //database connection
    connectDb()
    
    //mount the route
    const bookRoute = require('./routes/book')
    app.use('/api/v1/book', bookRoute)
    
    const port = process.env.port
    app.listen(port, () => {
        console.log(`port ${port} connected...`)
    })
    


    결론



    이 기사에서는 간단한 프로젝트를 생성하여 MongoDB를 Node.js와 함께 사용하는 방법을 배웠습니다. 이 자습서를 쉽게 탐색할 수 있기를 바랍니다.

    github의 전체 프로젝트 링크: https://github.com/backendbro/mongodb_template

    행복한 코딩 😀

    학점


  • MongoDB docs
  • 좋은 웹페이지 즐겨찾기