MongoDB를 사용한 NodeJS CRUD API

웹 개발 분야에 종사했다면 NodeJS와 MongoDB에 대해 이미 들어봤을 것입니다. NodeJS 공식 페이지에서는 Node.js®가 Chrome의 V8 JavaScript 엔진에 구축된 JavaScript 런타임이라고 정의합니다. 또한 MongoDB는 가장 널리 사용되는 NoSQL 데이터베이스 중 하나입니다. 이 기사에서는 Express 및 mongoose 도구와 함께 NodeJS를 사용하여 MongoDB에서 CRUD 작업을 수행할 것입니다.

Prerequisite



시작하려면 이미 MongoDB 클러스터를 설정했고 연결 URI가 있다고 가정합니다. 그렇지 않은 경우 내previous article에서 설정 방법을 찾을 수 있으며 무료 MongoDB 클러스터 설정에 대한 단계별 안내가 제공됩니다. 또한 NodeJS 및 Express에 대한 실무 지식이 있다고 가정합니다.

Setting Up



시작하기 위해 가장 먼저 할 일은 파일 구조를 만드는 것입니다. 루트 폴더를 만든 다음 루트 폴더 안에 다음 하위 폴더를 만드는 것이 좋습니다.



Installing Dependencies



이제 시작하려면 먼저 server.js 파일을 만든 다음 몇 가지 필수 종속 항목을 설치해야 합니다. 그러기 위해서는

npm init -y


touch server.js
touch .env
mkdir controllers
mkdir models
mkdir routes

npm install express mongoose dotenv cors body-parser



이렇게 하면 폴더 구조 및 종속성 설치가 완료됩니다. 이제 다음 단계는 mongoDB 연결 URI를 가져오고 .env 파일에 배치하는 것입니다. 이렇게 하려면 .env 파일을 열고 다음과 같이 편집합니다.

DB = "YOUR_CONNECTION_STRING_HERE"



Setting up Server and Routes



이제 경로를 설정하기 위해 server.js 파일을 편집하겠습니다. 다음 코드를 복사하여 server.js 파일에 붙여넣습니다.

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");

require("dotenv").config();

const app = express();

const routes = require("./app/routes");

var corsOptions = {
  origin: "http://localhost:8081",
};

app.use(cors(corsOptions));

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({ extended: true }));

let DB = process.env.DB;

mongoose
  .connect(DB, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log("mongoDB connected Successfully"))
  .catch((err) => console.log(err));

app.use("/api/notes", routes);

const PORT = process.env.PORT || 8080;

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});



그래서 기본적으로 우리가 여기서 하는 것은
  • 필수 종속성 가져오기
  • 경로 가져오기(아직 만들지 않았지만 곧 만들 예정)
  • mongoDB에 연결 중

  • Creating Models



    MongoDB와 Mongoose를 사용하고 있기 때문에 모델이 있어야 합니다. 이 앱에는 메모에 대한 필드를 포함할 단 하나의 모델 NotesModel이 있습니다.
    이제 모델 폴더 안에 NotesModel.js 파일을 만들고 다음 코드를 붙여넣습니다.

    const mongoose = require("mongoose");
    
    const NotesSchema = new mongoose.Schema(
      {
        title: String,
        description: String,
      },
      { timestamps: true }
    );
    
    const Note = mongoose.model("Note", NotesSchema);
    module.exports = Note;
    
    


    따라서 본질적으로 우리는 일을 단순하게 유지하기 위해 2개의 필드 제목과 문자열 유형의 설명만 가지고 있습니다. 또한 생성 및 수정 날짜를 기록하는 타임스탬프가 true로 설정되었습니다.

    Creating Router and Controller



    이제 server.js가 모두 설정되었으므로 컨트롤러와 라우터 설정을 시작할 수 있습니다.
    컨트롤러 폴더 안에 index.js 파일을 만들고 다음 코드를 붙여넣습니다.

    const NotesModel = require("../models/NotesModel");
    
    exports.findAll = async (req, res) => {
      try {
        const notes = await NotesModel.find({});
        res.send(notes);
      } catch (error) {
        res.status(500).send({
          message: error.message || "Some error occured while retrieving Notes",
        });
      }
    };
    
    exports.create = async (req, res) => {
      const Note = req.body;
    
      try {
        let NoteDoc = new NotesModel(Note);
        await NoteDoc.save();
        res.send(Note);
      } catch (error) {
        res.status(500).send(error);
      }
    };
    
    exports.findOne = async (req, res) => {
      const id = req.params.id;
    
      try {
        let Note = await NotesModel.findById(id);
        res.send(Note);
      } catch (error) {
        res.status(500).send(error);
      }
    };
    
    exports.update = async (req, res) => {
      let { ...data } = req.body;
      const result = await NotesModel.findOneAndUpdate(
        { _id: req.params.id },
        data,
        {
          new: true,
        }
      );
    
      res.send(result);
    };
    
    exports.delete = async (req, res) => {
      try {
        let id = req.params.id;
    
        await NotesModel.findByIdAndDelete(req.params.id);
    
        res.status(200).send();
      } catch (error) {
        res.status(500).send(error);
      }
    };
    


    이 부분에는 데이터베이스에서 데이터 생성, 읽기, 업데이트 및 삭제를 위한 논리가 포함되어 있습니다. 이제 작동하려면 경로 파일로 가져와 적절한 방법/경로에 매핑해야 합니다. 이렇게 하려면 route 폴더 안에 index.js라는 파일을 만들고 다음 코드를 붙여넣습니다.

    // Bring in the express server
    const express = require("express");
    
    // Bring in the Express Router
    const router = express.Router();
    
    // Import the Controller
    const controller = require("../controllers");
    
    // Create a new Note
    router.post("/", controller.create);
    
    // Get all Notes
    router.get("/", controller.findAll);
    
    // Get Note by Id
    router.get("/:id", controller.findOne);
    
    // Modify existing Note
    router.put("/:id", controller.update);
    
    // Delete Note by Id
    router.delete("/:id", controller.delete);
    
    module.exports = router;
    


    이제 모두 설정되었으므로 다음을 실행할 수 있습니다.

    node server.js
    


    서버가 시작되고 포트:8080을 수신합니다. Postman을 사용하여 API를 테스트할 수 있습니다.

    전체 프로젝트는 myGithub에서 찾을 수 있습니다.

    좋은 웹페이지 즐겨찾기