Express.js
Nodejs 에서 API 서버를 구축하는 데 가장 많이 사용되는 대표적인 프레임워크
미들웨어 모듈: 요청과 응답의 중간에서 목적에 맞는 특정 기능을 하는 함수
같이 사용하는 모듈
- route
- body-parser
- compression
- cookie-session / express-session
- session-file-store
- cors
- morgan
- multer
- response-time
- connect-timeout
package.json 생성
npm init
Express 설치
node_modules라는 폴더가 자동으로 생성된다.
npm i express
nodejs 실행
node app.js
라우팅
특정 엔드 포인트에 대한 클라이언트 요청에 응답하는 방법을 결정하는 것
const express = require('express')
const app = express()
app.listen(3000, () => {
console.log('server start')
})
app.get('/customer', function(req, res) {
res.send('get 응답')
}
응답 메소드
- res.download() : 파일 다운로드
- res.end() : 응답 프로세스 종료
- res.json() : JSON 응답 전송
- res.jsonp() : JSONP 지원을 통해 JSON 응답 전송
- res.redirect() : 요청의 경로를 재지정
- res.render() : 뷰 템플릿을 렌더링
- res.send() : 다양한 유형의 응답 전송
- res.sendFile() : 파일을 octet 스트림으로 전송
- res.sendStatus() : 응답 상태 코드를 설정한 후 해당 코드를 응답 Body에 담아서 전송
하나의 라우트에서 next 오브젝트를 사용해서 2개 이상의 콜백 함수를 실행할 수 있다.
app.get('/customer', function(req, res, next) {
console.log('callback 1')
next()
}, function(req, res, next) {
res.send('callback 2')
}
app.route()
모듈식 라우트를 작성하면 중복성이 감소하여 코드를 효율적으로 관리할 수 있다.
app.route('/customer')
.get(function(req, res) {
res.send('고객정보 조회')
})
.post(function(req, res) {
res.send('고객정보 추가')
})
.put(function(req, res) {
res.send('고객정보 수정')
})
.delete(function(req, res) {
res.send('고객정보 삭제')
})
}
express.Router
여러개의 파일로 분리해서 각각의 용도에 맞게 구현
const express = require('express')
const cutsomerRoute = require('./routes/customer')
const productRoute = require('./routes/product')
const app = express()
app.use(express.json({
limit: '50mb'
}))
app.listen(3000, () => {
console.log('server start')
})
app.use('/customer', cutsomerRoute)
app.use('/product', productRoute)
에러 처리하기
app.use(function (err, req, res, next) {
res.status(500).json({statusCode: res.statusCode, errMsg: err.msg})
})
express.static 정적 파일 제공하기
app.use(express.static('public')) // public 폴더 내의 모든 정적 파일을 URL로 제공할 수 있다
body-parser
요청 본문 구문을 해석해서 req.body 속성으로 사용하게해주는 미들웨어
npm i body-parser
express 4.16 이상부터는 내장돼있어서 호출이 필요없다.
const express = require('express')
const app = express()
// app.use(bodyParser.urlencoded({extended: false })
app.use(express.urlencoded({ extended: false })
app.use(express.json())
compression
압축을 위한 미들웨어
응답 데이터가 큰 경우 사용 ex) 이미지, 지도 데이터
npm i compression
cookie-session
쿠키 내 클라이언트의 세션 데이터를 저장하는 쿠키 기반 세션 관리 미들웨어
브라우저 최대 쿠키 크기 내에서만 저장 가능하다 (서버측 데이터베이스 리소스는 필요하지 않다)
npm i cookie-session
express-session
서버에 저장하는 세션 관리 미들웨어
물리적 DB 혹은 파일로 저장하면 더 안전하고 많은 데이터를 저장 가능
npm i express-session
session-file-store
세션 정보를 파일로 저장해서 관리 가능하다.
npm i session-file-store
CORS
도메인 또는 포트가 다른 서버의 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
npm i cors
orgin : URL 구조의 프로토콜, 호스트, 포트를 합친 것
Cross-Origin이란 서로다른 Origin 중 하나라도 다르면 다른 출처로 인식하고 CORS 설정을 하지 않으면 접근할 수 없도록 하는것
morgan
HTTP 요청에 대한 로그를 관리하는 미들웨어
npm i morgan
multer
multi-part/form-data 데이터를 처리하기 위한 미들웨어
파일을 쉽게 업로드하게 해준다.
npm i multer
response-time
클라이언트 요청에 대한 응답 시간을 관리하는 미들웨어
npm i response-time
클라이언트로부터 요청 올 때마다 응답하는데 걸린 시간을 콘솔 창에 출력하기
const express = require('express')
const responseTime = require('response-time')
const app = express()
app.use(responseTime((req, res, time) => {
console.log(`${req} ${time}`)
}))
app.get('/', function(req, res) {
res.send('hello')
})
app.listen(8000)
connect-timeout
클라이언트의 요청에 대해 지정된 시간 동안 응답을 못하는 경우 타임아웃 처리하는 미들웨어
라우터별로 타임아웃을 지정하는 것을 추천한다.
'개발공부 > NodeJS' 카테고리의 다른 글
마이크로서비스와 Nodejs (0) | 2023.06.06 |
---|---|
Nodejs 환경에서 Artillery로 부하테스트 하기 (0) | 2023.05.29 |
[NodeJS] json-server 이용하기 (0) | 2023.05.27 |
Nodejs 내장 모듈과 객체 (0) | 2023.05.27 |
자주 사용하는 자바스크립트 문법 (1) | 2023.05.27 |
댓글