[node.js] 라우팅 설정 및 Controller분리

GONI·2021년 9월 28일
0
post-thumbnail

코딩의 마무리는 누가뭐라해도 리팩토링일 것이다. (아님말구...) 하지만 마지막에 한꺼번에 리팩토링을 하려 하면 꽤나 골치아픈 상황이 발생할 수도 있다. 예를 들어 파일을 불러오는 경로를 다시 지정해 주어야 한다던지 말이다. 그래서 중간중간이나 처음에 코드를 작성하기 전에 미리 설계를 해두면 나중에 해야할 일을 조금이나마 덜 수 있겠지요?

node환경에서 코드를 조금 더 깔끔하게 만들 수 있는 방법으로는 route를 분리하여 설정해주는 방법이 있을 것이다. 아주 기초단계부터 파일을 나누는 과정까지 오늘도
📝기록해보자📝


1. Express 라우팅 기본 설정

express를 사용하는 사람이라면 누구나 알 수 있는 기초부터 시작해보자.

app.get("/test", (req, res) => {
  res.send("GET request to the test homepage");
})
app.post("/test", (req, res) => {
  res.json({ "message" : "POST request to the test homepage" })
})
app.delete("/test", (req, res) => {
  res.json({ "message" : "DELETE request to the test homepage" })
})

는 각각의 method에 대한 요청 정리


2. 라우팅 경로 합치기

위 코드에서 좀 더 간결하게 라우팅 경로를 합칠 수 있다.

app.route("/test")
  .get((req, res) => {
    res.send("GET request to the test homepage");
  })
  .post((req, res) => {
    res.json({ "message" : "POST request to the test homepage" })
  })
  .delete((req, res) => {
    res.json({ "message" : "DELETE request to the test homepage" })
  })

처음보단 나름 깔끔해진 것 같지만 아무래도 이것 보다는...?


3. 라우트 파일 분리

역시 파일별로 분류해 주는게 가장 깔끔해보인다.

기존 app.js파일에 test route를 불러와서 세팅할 것이다.

const testRoute = require("./routes/test-route")
app.use("/test", testRoute)

다음은 본격적으로 ./routes/test-route.js파일을 작성해주자.

const express = require("express")
const router = express.Router()
router.get("/", (req, res, next) => {
  res.send("GET request to the test homepage");
})
router.post("/", (req, res, next) => {
  res.json({ "message" : "POST request to the test homepage" })
})
router.delete("/", (req, res, next) => {
  res.json({ "message" : "DELETE request to the test homepage" })
})

module.exports = router

app.js에 이미 /test라우팅을 지정해놨기 때문에 test-route파일에서는 이를 생략하고 적어줄 수 있다. 이런식으로 구성하면 좀 더 코드를 세세하게 분리할 수 있다.


4. Controller 분리

마지막으로 위의 test.js파일에서 Controller를 다시 분리할 수 있다
(MVC패턴의 노예)

./controllers/test-controller.js파일을 생성

module.exports.getTest = (req, res, next) => {
  res.send('GET request to the test homepage');
}
module.exports.postTest = (req, res, next) => {
  res.json({ "message" : "POST request to the test homepage" })
}
module.exports.deleteTest = (req, res, next) => {
  res.json({ "message" : "DELETE request to the test homepage" })
}

마지막으로 ./routes/test-route.js 라우트 파일로 돌아가서

const test = require("../controllers/test-controller")
router.get("/", test.getTest)
router.post("/", test.postTest)
router.delete("/", test.deleteTest)

Controller 설정을 마치면 성공적으로 분리가 끝난다.

언제 파일을 분리하는지는 본인 선택이지만, route만 분리하여 코드를 구현한 뒤, 코드가 완성되면 Controller파일로 따로 분리해주는 것이 나에게 제일 편한 방법인 것 같다. 각자 편리한 방법을 선택해주도록 하자!

profile
오로지 나의 기억력을 위한 일지

0개의 댓글