🎯 λΌμš°νŒ…μ„ 톡해 νŒŒμΌμ„ λΆ„λ¦¬ν•˜κ³ , 각 apiκ°€ 연결될 수 μžˆλ„λ‘ userIdλ₯Ό ν™œμš©ν•©λ‹ˆλ‹€.


πŸ“™ Today I Learned

μ‹€μŠ΅ 파일 뢄리

λΌμš°νŒ…(Routing) μ΄λž€?
ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ²˜λ¦¬ν•  μ μ ˆν•œ 경둜λ₯Ό μ°Ύμ•„ 응닡을 λ°˜ν™˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.


ν”„λ‘œμ νŠΈ ꡬ쑰

πŸ“‚project-root
  β”œβ”€β”€ πŸ“‚routes
  β”‚     β”œβ”€β”€ πŸ“„users.js
  β”‚     β”œβ”€β”€ πŸ“„channels.js
  β”œβ”€β”€ πŸ“„app.js
  β”œβ”€β”€ πŸ“„package.json

πŸ€” μ™œ νŒŒμΌμ„ λΆ„λ¦¬ν• κΉŒ?

  • μ½”λ“œμ˜ 가독성
  • μœ μ§€λ³΄μˆ˜ 용이
  • ν™•μž₯μ„±

app.js

const express = require('express');
const app = express();

app.listen(7777);

const userRouter = require('./routes/users');
const channelRouter = require('./routes/channels');

app.use('/', userRouter);
app.use('/channels', channelRouter);
  • app.use('/', userRouter); β†’ / 경둜 μ΄ν•˜μ—μ„œ users.js의 라우트λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  • app.use('/channels', channelRouter); β†’ /channels μ΄ν•˜μ—μ„œ channels.js의 라우트λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.


routes/users.js

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

router.use(express.json());

let db = new Map();

router.post('/join', ...)
            
router.post('/login', ...)

router
  .route('/users')
  .get(...)
  .delete(...)
  
  
module.exports = router;
  • express.Router(); 둜 객체λ₯Ό μƒμ„±ν•œ ν›„ λΌμš°ν„°λ₯Ό 내보낼 수 있게 ν•©λ‹ˆλ‹€.

routes/channels.js

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

router.use(express.json());

let db = new Map();
let id = 1;

router
  .route('/')
  .post(....)
  .get(...);

router
  .route('/:id')
  .get(...)
  .put(...);
  
  
module.exports = router;
  • express.Router(); 둜 객체λ₯Ό μƒμ„±ν•œ ν›„ λΌμš°ν„°λ₯Ό 내보낼 수 있게 ν•©λ‹ˆλ‹€.



채널 API 섀계

  • 채널 생성 : POST /channels

    • request : body ( channelTitle, userId )
      cf. userIdλŠ” μ›λž˜ ν—€λ”μ—μ„œ λ°›μ•„μ•Ό ν•˜μ§€λ§Œ, μš°μ„ μ€ μš”μ²­ λ°”λ””μ—μ„œ ν•¨κ»˜ 전달받도둝 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

    • response : 201 Created ${channelTitle}λ‹˜ 채널을 μ‘μ›ν•©λ‹ˆλ‹€. -> 채널 관리 νŽ˜μ΄μ§€


  • 채널 μˆ˜μ • : PUT /channels/:id

    • request: URL (id), body(channelTitle)

    • response : 200 Ok 채널λͺ…이 μ„±κ³΅μ μœΌλ‘œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄${} => μˆ˜μ • ${}


  • 채널 κ°œλ³„ μ‚­μ œ : DELETE /channels/:id

    • request: URL(id)

    • response : 200 Ok μ‚­μ œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. => 메인 νŽ˜μ΄μ§€


  • 채널 전체 쑰회 : GET /channels

    • request: body(userId)

    • response : 200 Ok 채널 전체 데이터 list, json array


  • 채널 κ°œλ³„ 쑰회 : GET /channels/:id

    • request: URL(id)

    • response : 채널 κ°œλ³„ 데이터




νšŒμ› API 섀계

  • 둜그인 : POST /login

    • request: body(userId, pwd)

    • response: ${name}λ‹˜ ν™˜μ˜ν•©λ‹ˆλ‹€ β‡’ 메인 νŽ˜μ΄μ§€λ‘œ 이동

  • νšŒμ› κ°€μž… : POST /join

    • request: body(userId, pwd, name)

    • response: ${name}λ‹˜ ν™˜μ˜ν•©λ‹ˆλ‹€ β‡’ 둜그인 νŽ˜μ΄μ§€λ‘œ 이동

  • νšŒμ› κ°œλ³„ 쑰회 : GET /users

    • request: body(userId)
      cf. userIdλŠ” μ›λž˜ ν—€λ”μ—μ„œ λ°›μ•„μ•Ό ν•˜μ§€λ§Œ, μš°μ„ μ€ μš”μ²­ λ°”λ””μ—μ„œ ν•¨κ»˜ 전달받도둝 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

    • response: id, name

  • νšŒμ› κ°œλ³„ νƒˆν‡΄ : DELETE /users

    • request: body(userId)
      cf. userIdλŠ” μ›λž˜ ν—€λ”μ—μ„œ λ°›μ•„μ•Ό ν•˜μ§€λ§Œ, μš°μ„ μ€ μš”μ²­ λ°”λ””μ—μ„œ ν•¨κ»˜ 전달받도둝 κ΅¬ν˜„ν•©λ‹ˆλ‹€.

    • response: ${name}λ‹˜ λ‹€μŒμ— 또 λ΅™κ² μŠ΅λ‹ˆλ‹€. β‡’ 메인 νŽ˜μ΄μ§€λ‘œ 이동




✏️ ν•œ 쀄 회고

express λΌμš°νŒ… 방법을 λ°°μ›Œμ„œ νŒŒμΌλ“€μ΄ κΉ”λ”ν•˜κ²Œ λΆ„λ¦¬λœ κ±° κ°™μ•„μ„œ 깔끔해진 것 κ°™μ•„ 기뢄이 μ’‹μ•˜μŠ΅λ‹ˆλ‹€!

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€