[Node.js]Express 서버 만들기

LMH·2022년 12월 11일
0
post-thumbnail

지난 포스팅에서 Node.js를 통해 HTTP 요청과 응답을 받을 수 있는 API 서버를 만들어 보았습니다. 오늘은 Express 프레임 워크를 활용하여 보다 간단하게 서버를 구축하는 방법을 정리하겠습니다.

간단한 웹 서버 만들기

우선 express를 설치하고 간단한 웹 서버를 만들어 보겠습니다. express를 설치하고 기본 경로를 App.js로 사용하겠습니다. 몇 줄이 안되는 코드로 손 쉽게 get 요청을 구현 할 수 있습니다.

npm install express
// app.js
const express = require('express');
const app = express(); // app 객체 
const port = 3000;

app.get('/', (req, res) => { 
	res.send('Express')
})

app.listen(port, () => {
	console.log(`현재 ${port} 포트에서 서버가 작동 중 입니다.`)
}

라우터 사용하기

App.js에서 URL에 따라 분기하여 응답을 보내줄 수 있지만, 웹 페이지 규모가 커지게 되면 그에 따라 서버에서 처리해야하는 로직이 복잡해 집니다. 그렇기 때문에 라우터를 활용하여 url, 기능별로 분기하여 코드를 작성하는 것이 좋습니다.

// lowerRouter.js
const router = express.Router();

router.get('/lower', (req, res) => {  // /lower 경로로 get 메소드를 요청하면 콜밸함수 실행
	res.json(data); // json() 메소드를 이용하여 직렬화 후 전송
})
router.post('/lower', (req, res) => {  // /lower 경로로 post 메소드를 요청하면 콜밸함수 실행
// req.body => { id : 100, name : 'lmh', ...}
  	data.push(req.body)  //  요청 시 전송한 body를 data에 추가합니다.
	res.json(data); // json() 메소드를 이용하여 직렬화 후 전송
}
}

컨트롤러 구현

위에서는 lowerRouter.js 콜백함수를 통해 직접 로직을 구현했지만 라우터로 분기한 후 컨트롤러에서 라우터 객체가 http 메소드를 호출 할 때 전달받는 콜백함수들을 기능별로 구현할 수 있습니다. 아래의 코드는 discussion이라는 객체 데이터를 조회하고 생성하고 삭제하는 것을 구현한 코드 입니다.

//discussionRouter.js
const { discussionsController } = require("../discussionController");
const express = require("express");
const router = express.Router();
// get 요청
router.get("/", discussionsController.findAll);

router.get("/:id", discussionsController.findById);  // id라는 파라미터를 받 습니다. 
// POST 요청
router.post("/", discussionsController.create);
// DELETE 요청
router.delete("/:id", discussionsController.delete); // id라는 파라미터를 받 습니다. 

module.exports = router;

discussionRouter에서 url과 http 메소드에 따라 분기할 때 마다 사용되는 콜백함수를 객체에 담아 export 합니다.

// discussionController.js
const { Discussions }require("../repository/discussions");
const { v4: uuid } = require("uuid"); // id를 난수로 생성

let newDiscussionData = Discussions

// 컨트롤러 객체
const discussionsController = {
  findAll: (req, res) => {
    return res.status(200).json(newDiscussionData);
  },

  findById: (req, res) => {
    const { id } = req.params; 
    const param = Number(req.params.id); 
    if (req.params !== undefined) {
      const filteredData = newDiscussionData.filter((data) => {
        return data.id === param;
      });

      return res.json(filteredData);
    }
  },

  create: (req, res) => {
    const discussion_uuid = uuid();
    const newDiscussion = Object.assign(req.body, { id: discussion_uuid });
    console.log("새로운 게시글이 추가되었습니다.");
    console.log(req.body);
    newDiscussionData.unshift(newDiscussion);

    return res.status(201).json(newDiscussion);
  },

  delete: (req, res) => {
    const { id } = req.params;
    const deletedData = newDiscussionData.filter((data) => {
      console.log("param : " + req.params.id);
      return String(data.id) !== req.params.id;
    });
    newDiscussionData = deletedData;

    console.log("id :" + req.params.id + " / 게시글이 삭제되었습니다.");
    return res.status(200).json();
  },
};

module.exports = {  // 컨트롤러 객체 export
  discussionsController,
};

정리

Epress 프레임워크를 사용하여 어떻게 서버를 구현하는지에 대해서 간단하게 정리하였습니다. 다음 포스팅에서는 Express의 미들웨어와 사용되는 메소드의 기능에 대해서 조금 더 자세하게 알아보도록 하겠습니다.

Reference

profile
새로운 것을 기록하고 복습하는 공간입니다.

0개의 댓글