[Node]API 분리(Router)

김나나·2024년 8월 29일

Node.js

목록 보기
28/50

오늘 알아볼 것은..

  1. API 다른 파일로 분리시키기
  2. 라우터 파일에서 DB 변수 사용하는 방법

  1. 간단하게 서버파일에 get 요청을 받는 API 두 개만 생성하고 시작하자
app.get("/shop/shirts", (요청, 응답) => {
  응답.send("셔츠파는 페이지임");
});

app.get("/shop/pants", (요청, 응답) => {
  응답.send("바지파는 페이지임");
});
  1. 이후 API를 보관할 폴더 하나를 프로젝트 루트 경로에 생성한 뒤 API를 모아둘 파일 하나를 만들어준다.

  2. 앞서 만들어져있던 API를 shop.js에 옮겨주며, 파일 최상단과 최하단에 아래 코드를 작성해준다.

최상단

const router = require("express").Router();

최하단

module.exports = router;

이후, app.get, app.post 이런 식으로 적혀있던 부분을
router.get이런 식으로 싹~ 바꿔주고..

약간 이렇게.. 샌드위치처럼 API를 끼워주자.

  1. js파일을 export해줬으니 이제 server.js로 돌아가서 해당 파일을 require해주자.
app.use("/", require("./routes/shop.js"));

이후 화면이 잘 나오는지 테스트

잘 가져와진다.


✔API 분리시 기억할 것

  1. 상단에 const router = require('express').Router()작성
  2. app.get 이런 식으로 적힌 것들 전부 router로 변경
  3. module.exports = router로 추출해주기
  4. 서버코드에서 app.use("/", require("/경로"))이런식으로 require

✨공통된 URL 시작부분 축약하는 방법

위의 /shop/어쩌구~로 쓰여져있던 API들에서 공통된 부분을 지워준 뒤

require해준 서버파일로 돌아가서

이렇게 넣어주면 동일하게 동작한다.


✨다른 파일에서 DB 변수 쓰는 방법

DB를 따로 분리시켜 다른 파일에서 받아와 쓰면 될 일이었다..!

  1. database.js파일 하나를 생성해주고, DB를 연결해주는 부분을 분리시켜주었다.
const { MongoClient } = require("mongodb");

const url = process.env.DB_URL;
let connectDB = new MongoClient(url).connect();

module.exports = connectDB;

이제 다른 곳에서 connectDB를 사용하면 저 긴 코드를 다 작성해주지 않아도 되는 것.

  1. 서버로 돌아가서 한 번 넣어보면 이런 모습.

Q1. 하단과 같은 API를 server.js에 만들어놓고 다른 파일로 빼봅시다.

app.get('/board/sub/sports', checkLogin, (요청, 응답) => {
   응답.send('스포츠 게시판')
})
app.get('/board/sub/game', checkLogin, (요청, 응답) => {
   응답.send('게임 게시판')
}) 

아래는 server.js

function checkLogin(요청, 응답, next) {
  if (!요청.user) {
    응답.send("로그인하세요");
  }
  next(); // 미들웨어 코드 실행 끝났으니 다음으로 이동
}

app.use("/board/sub", checkLogin, require("./routes/board.js"));

아래는 routes>board.js

const router = require("express").Router();

let connectDB = require("./../database.js");

let db;
connectDB
  .then((client) => {
    db = client.db("forum");
  })
  .catch((err) => {
    console.log(err);
  });

router.get("/sports", (요청, 응답) => {
  응답.send("스포츠 게시판");
});
router.get("/game", (요청, 응답) => {
  응답.send("게임 게시판");
});

module.exports = router;
profile
10분의 정리로 10시간을 아낄 수 있다는 마음으로 글을 작성하고 있습니다💕

0개의 댓글