VaIice의 이야기

[Node.js] API별 파일 분리 본문

[Node.js]

[Node.js] API별 파일 분리

VaIice 2024. 7. 20. 00:55

 1. 예시 코드 - require 사용 (import도 가능) 

routes 폴더 생성
shop.js에 코드 작성

 

// shop.js
 
const router = require('express').Router()

router.get('/shop/shirts', (request, response) => {
  response.send('셔츠')
})

router.get('/shop/pants', (request, response) => {
  response.send('바지')
})

module.exports = router
 

 

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

 app -> router 변경 

 

//server.js

app
.use('/', require('./routes/shop.js'))
 

 

 

결과

 

 

 2. URL 축약 

// shop.js
router.get('/shop/shirts', (request, response) => {
  response.send('셔츠')
})

router.get('/shop/pants', (request, response) => {
  response.send('바지')
})
 

 

 공통된 URL 

 

//server.js
app.use('/shop', require('./routes/shop.js'))
/
/ shop.js
router.get('/shirts', (request, response) => {
  response.send('셔츠')
})

router.get('/pants', (request, response) => {
  response.send('바지')
})
 

 

 app.use에서 URL 통합 

 

 

 

 3. 관련 API 작명법 

 조회: /post GET 

 발행: /post POST 

 수정: /post PUT 

 삭제: /post DELETE 

 

 => 다른 폴더로 옮기기 용이 

 

 

 

 삭제: /post DELETE

 4. 다른 폴더에서 변수 사용

db 사용할 API가 많다면?
database.js 파일 생성

 

// database.js
 
const {MongoClient} = require("mongodb")

const url = process.env.DB_URL
// MongoDB 접속
let connectDB = new MongoClient(url).connect()

module.exports = connectDB
 
// server.js

let connectDB = require('./database.js')
 
let db;
connectDB.then((client)=>{
   // forum DB에 연결
   db = client.db('forum')
   // 포트 번호 8080, 서버 띄우기
   app.listen(process.env.PORT, () => {
    console.log('http://localhost:8080에서 서버 실행 중')
   })
}).catch((err)=>{
  console.log(err)
})

 Q. db를 database.js로 옮기면? 

 

 MongoDB에 연결하는 작업은 시간이 걸리기 때문에 비동기 처리 

 

 connectDB는 Promise 객체이기 때문에, 비동기 작업 전엔 사용 불가 / 작업이 완료된 후에 then 실행 

 

 db는 단순 변수이기 때문에, connectDB가 할당되기 전에, exports가 가능하고 에러를 유발할 수 있음 

 

 connectDB가 database.js에서 할당이 되면, server.js에 있던 then이 실행 

 

 

 db는 connectDB가 완료된 후에 사용할 수 있어야하므로, db를 직접 exports하는 대신, 

 connectDB를 exports하고 필요한 곳에서 then으로 할당  

 

 

 Q. board.js 파일을 만들어보자 

 

// board.js
 
const router = require('express').Router()
let loginCheck = require('../server')

router.get('/board/sub/sports', loginCheck, (request, response) => {
  response.send('셔츠')
})

router.get('/board/sub/game', (request, response) => {
  response.send('바지')
})

module.exports = router
 
// server.js
 
module.exports = loginCheck
app.use('/', require('./routes/board.js'))
 

 

 module.exports는 require 위에 적어야한다. 

 -> middelware는 별도의 파일에 저장하는 것이 안전