본문 바로가기
  • 삽질하는 자의 블로그
Node.js(Express)

8. bodyparser 의 파싱과, 컨트롤러에서 GET 과 POST 에 대한 응답로직

by 이게뭐당가 2023. 2. 18.

결과적으로 node.js 로 들어오는 요청과 응답이 어떻게 이루어지는지 확인해보자.

 

1. index.js

 

1) 들어오는 요청이, 다른 오리진이라도 상호작용 할 수 있게, cors 를 미들웨어로 추가한다.

2) 들어오는 요청에 대해 bodyparser 미들웨어를 통해 자바스크립트코드로 변환한다.

3) 들어오는 요청에 알맞는 경로의 라우터의 미들웨어로 연결시켜준다.

4) 잘못된 요청에 대해 경로 오류와, 에러에 대해 처리하는 미들웨어에 의해 처리된다.

< index.js >

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

    const diaryRouter = require("./routes/diaryt-routes");

    const app = express();

    app.use(cors());			// CORS 에러 처리
    app.use(bodyParser.json());		// 들어오는 요청이 자바스크립트 코드로 변환

    app.use("/api/diary", diaryRouter);	// 적절한 라우터를 연결

    app.use((req, res, next) => {	    // 모든 라우터를 거쳐, 맞는 라우터가 없을때 최종적으로 담길 미들웨어
      const error = new Error("wrong url");
      error.code = 404;
      throw error;
    });

    app.use((error, req, res, next) => {	    // 오류처리 핸들러
      if (res.headerSent) {
        return next(error);
      }
      res.status(error.code || 500);
      res.json({ message: error.message || "something got wrong" });
    });
    
    app.listen(5000);

 

2. 라우터

 

1) index.js 에서 보내는 경로 ( "/api/diary") 에 추가적으로 더해지는 경로에 대해 처리

2) 해당하는 경로에 도달했을때, 실제로 동작할 미들웨어를 생성

< routes / diary-routes.js >

    const express = require("express");
    const diaryContoller = require("../controllers/diary-controller");	// 컨트롤러에서 실제 로직 import

    const router = express.Router();

    router.get("/:userEmail", diaryContoller.getUserDiary);

    router.post("/insert", diaryContoller.postUserDiary);

    module.exports = router;

 

3. 컨트롤러

 

1) 라우터에 들어왔을때 실제로 실행되는 로직의 생성

< controllers / diary-controller.js >

    const { diaryValidation } = require("../helper/diary-valdation");

    const getUserDiary = async (req, res, next) => {
      const userEmail = req.params.userEmail;

      if (!userEmail.includes("@")) {
        const error = new Error("이메일이 올바르지 않습니다.");
        error.code = 404;
        next(error);
        return;
      }
        // DB 에서 가져올 로직 추가
      res.json({ message: "this is diary", data: response });
    };

    const postUserDiary = async (req, res, next) => {
      const errorCheck = diaryValidation(req.body);

      if (errorCheck !== null) {
        next(errorCheck);
        return;
      }
      const { userEmail, diaryTitle, diaryContent, feeling, date } = req.body;

      const inputData = {
        userEmail,
        diaryTitle,
        diaryContent,
        feeling,
        date,
      };
        // DB 에 넣는 로직 추가
      res.status(201).json({ message: "success", data: response });
    };

    module.exports = {		// exports
      getUserDiary,
      postUserDiary,
    };

댓글