Node.js, Express 및 MongoDB로 REST API 구축

[ SOURCE CODE | ORIGINAL ARTICLE ]

이 튜토리얼에서는 Node.js 서버와 MongoDB 데이터베이스를 사용하여 REST API를 구축하는 방법을 배웁니다. 우리는 일을 단순하게 유지하고 "학생"기록을 저장하는 "학교"데이터베이스를 구축할 것입니다. 여기에서 사용된 기본 개념을 이해하고 나면 더 복잡한 API 기반 애플리케이션을 만드는 방법을 잘 알게 될 것입니다.

참고: 계속하기 전에 Node.jsMongoDB을 설치해야 합니다.

다음 명령으로 폴더를 만들고 프로젝트를 시작하여 시작하겠습니다.

mkdir school
cd school
npm init -y


이제 NPM을 사용하여 필요한 종속성을 설치할 수 있습니다.

npm install express mongoose body-parser


  • express – 다양한 API 끝점에 대한 HTTP 유틸리티 메서드 및 경로를 제공합니다.
  • mongoose – 응용 프로그램 데이터를 모델링하기 위한 간단한 스키마 기반 솔루션을 제공합니다.
  • body-parser – 핸들러 전에 미들웨어에서 들어오는 요청을 구문 분석합니다.
  • index.js 파일에서 다음으로 방금 설치한 종속 항목을 포함하여 시작할 수 있습니다.

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


    그런 다음 JSON을 사용하도록 시작express() 및 설정bodyParser:

    const app = express();
    app.use(bodyParser.json());
    

    mongoose를 사용하여 "학교"데이터베이스에 연결합니다. 이 데이터베이스는 첫 번째 학생 기록이 추가될 때 자동으로 생성되므로 아직 존재할 필요가 없습니다.

    const db = "mongodb://localhost/school";
    mongoose
      .connect(db, { useNewUrlParser: true, useUnifiedTopology: true })
      .then(() => console.log("MongoDB Connected"))
      .catch((err) => console.log(err));
    


    마지막으로 앱에 포트 5000에서 수신하도록 지시하고 서버가 실행 중일 때 메시지를 기록합니다.

    app.listen(5000, () => console.log("Server Running"));
    


    이제 다음 명령을 실행하여 서버를 시작할 수 있습니다.

    node index.js
    


    성공하면 터미널에 "MongoDB 연결됨"및 "서버 실행 중"이 표시됩니다.

    또한 파일 변경 사항을 모니터링하고 매번 수동으로 수행할 필요가 없도록 서버를 자동으로 다시 시작하는 nodemon도 설치합니다.

    npm install nodemon --save-dev
    nodemon index.js
    


    모델 만들기



    모델은 MongoDB 데이터베이스에서 문서를 만들고 읽는 일을 담당합니다.
    models라는 새 폴더를 만들고 내부에 다음과 함께 student.js 파일을 추가합니다.

    const mongoose = require("mongoose");
    const Schema = mongoose.Schema;
    
    const StudentSchema = new Schema({
      name: { type: String, required: true },
      age: { type: Number, required: true },
      email: { type: String, required: true },
    });
    
    module.exports = mongoose.model("student", StudentSchema);
    


    이는 학생 컬렉션의 스키마(이름, 연령 및 이메일)를 정의합니다.

    경로 만들기



    경로는 특정 URL(경로)이 요청될 때 실행할 코드를 애플리케이션에 알려줍니다.

    새 학생 기록을 데이터베이스에 추가할 라우터부터 시작하겠습니다. routes라는 새 폴더를 만들고 내부에 다음과 함께 student.js 파일을 추가합니다.

    const express = require("express");
    const router = express.Router();
    const Student = require("../models/student");
    
    router.post("/add", (req, res) => {
      const newStudent = new Student({
        name: req.body.name,
        age: req.body.age,
        email: req.body.email,
      });
      newStudent
        .save()
        .then(() => res.json("Student Added..."))
        .catch((err) => res.status(400).json("Error: " + err));
    });
    
    module.exports = router;
    


    그런 다음 다음을 사용하여 라우터에 index.js 파일을 포함해야 합니다.

    const studentsRouter = require("./routes/student");
    app.use("/students", studentsRouter);
    


    다른 끝점을 만들기 전에 무료 데스크톱 API 클라이언트(Windows 및 OSX)를 사용하여 모든 것이 작동하는지 테스트해 보겠습니다Insomnia. 설치가 완료되면 다음 설정으로 "새 요청"을 생성합니다.



    다음 JSON 데이터를 사용하여 http://localhost:5000/students/add에 요청을 보냅니다.



    성공하면 "학생 추가됨"메시지가 표시됩니다.

    그런 다음 MongoDB Compass을 사용하여 데이터베이스를 시각화할 수 있습니다.


    /add 엔드포인트가 작동하면 다른 경로 생성을 계속 진행하겠습니다.

    모든 경로를 routes/student.js 파일에 추가해야 합니다.

    먼저 모든 학생을 JSON 형식으로 반환하는 GET 요청:

    // http://localhost:5000/students/ 
    router.get("/", (req, res) => {
      Student.find()
        .then((students) => res.json(students))
        .catch((err) => res.status(400).json("Error: " + err));
    });
    


    다음으로 일치하는 _id가 있는 학생 기록을 삭제합니다.

    // http://localhost:5000/students/delete/STUDENT_ID
    router.delete("/delete/:id", (req, res) => {
      Student.findByIdAndDelete(req.params.id)
        .then(() => res.json("Student Deleted..."))
        .catch((err) => res.status(400).json("Error: " + err));
    });
    


    마지막으로 일치 항목_id으로 학생 기록을 업데이트합니다.

    // http://localhost:5000/students/update/STUDENT_ID
    router.post("/update/:id", (req, res) => {
      Student.findById(req.params.id)
        .then((student) => {
          student.name = req.body.name;
          student.age = req.body.age;
          student.email = req.body.email;
          student
            .save()
            .then(() => res.json("Student Updated..."))
            .catch((err) => res.status(400).json("Error: " + err));
        })
        .catch((err) => res.status(400).json("Error: " + err));
    });
    


    학생을 업데이트할 때 업데이트된 JSON 데이터도 전달해야 합니다.

    {
      "name" : "Amanda Jane Burns",
      "age" : "14",
      "email" : "[email protected]"
    }
    


    이것으로 API 설정이 완료되었습니다. 읽어주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기