VaIice의 이야기

[Node.js] 환경변수 관리 본문

[Node.js]

[Node.js] 환경변수 관리

VaIice 2024. 7. 19. 00:04

 1. 환경변수 저장 라이브러리 

 npm install dotenv 

// server.js
 
require('dotenv').config()

 

 

 2. 환경변수 보관 

server와 같은 폴더에 생성

 

// .env
 
PORT=8080
// server.js
 
// 변경 전
   app.listen(8080, () => {
    console.log('http://localhost:8080에서 서버 실행 중')
   })
 
// 변경 후
  app.listen(process.env.PORT, () => {
    console.log('http://localhost:8080에서 서버 실행 중')
   })

// mongoDB 주소
 
const url = process.env.DB_URL
 

 

 process.env.변수명 

 

 3. middleware 

API에 자주 쓰이는 코드가 있다.ex) 로그인 검사=> request.user로 검사

 

 
function loginCheck(request, response) {
    if (!request.user) {
      response.send('로그인을 해주세요.')
    }
}
 

 

 
app.get('/write', (request, response) => {
  loginCheck(request, response)  
  response.render('write.ejs')
})
 

 

이렇게 함수를 남겨도 된다.

 

 
app.get('/write', loginCheck, (request, response) => {
  response.render('write.ejs')
})
 

 

 하지만 파라미터 중간에 기입해도 똑같은 기능을 하는데, 

 request와 response 사이에 실행이 된다. 

 즉, API가 실행되기 전에, 중간에 있는 함수부터 실행이 되는데 

 이를 middleware라고 부른다. 

 request, response 마음대로 사용 가능 

 최소 3개의 파라미터를 집어넣어야한다. (request, response, next 필수) 

 

 
function loginCheck(request, response, next) {
    if (!request.user) {
      response.send('로그인을 해주세요.')
    }
    next()
}
 

 

 next(): 다음 코드 실행 

 

 
app.get('/write', (request,  response) => { }, (request, response) => {
  response.render('write.ejs')
})
 

 

이렇게도 가능하다.

 

 
app.get('/write', [loginCheck, ... , ...], (request, response) => {
  response.render('write.ejs')
})
 

 

 [middelware1, middleware2, ...]로 여러 개 사용 가능 

 

 

 Q. 만약 API 수 백 개에 middelware를 적용하고 싶다면? 

 
app.use(loginCheck)
 

 밑에 있는 모든 API에 middleware 적용 

 

 
app.use('/URL', loginCheck)
 

 

 /URL로 API가 요청됐을 때, middleware 실행 

 그러나 /URL/...에서도 적용 

 

 

 

 Q1. /list로 시작하는 API에 현재 시간 출력 

 
app.use('/list', printTime)
 
function printTime(request, response, next) {
  let time = new Date();
  console.log(time);
  next()
}
 

 

 만약 실행이 안 된다면, app.use('/list')를 list API보다 위에 놓자. 

 

 

 Q2. 로그인, 회원가입 시 ID, PW 공백 체크 

 
function checkBlank(request, response, next) {
  if (!request.body.username) {
    response.send('아이디를 입력해주세요!!!')
  }
  else if (!request.body.password) {
    response.send('비밀번호를 입력해주세요!!!')
  }
  next()
}
 
 
app.post('/login', checkBlank, (request, response, next) => {
 
app.post('/signUp', checkBlank, async (request, response) => {