티스토리 뷰

프로그래밍/NodeJS

Express

국윤창 2020. 1. 10. 18:54

Express는 nodejs http 모듈에 추가 기능을 부여한 웹 서버 프레임워크다. 기능이 많지 않고 라우팅과 미들웨어 관리, 호출 정도만 해준다.

 

설치하기

npm으로 express 패키지를 설치해보자. 아래와 같은 명령어를 입력하면 설치된다.

$ npm install express --save

express로 간단한 예제를 만들어보자.

const express = require('express')

const app = express()
const port = 5000

// 라우트 메소드
app.get('/', function(req, res) {
  res.send('Express Test')
})

// 요청 받기 시작
app.listen(port, () => console.log(`listen on ${port}`))

위와 같이 같단한 예제만으로 요청 처리를 할 수 있다. 위 예제는 5000번 포트에서 '/' 경로로 접근할 때 'Express Test'라는 메시지를 내려주는 간단한 서버다.

 

라우팅

Express로 원하는 URL에서 요청을 처리하기 위해서는 라우트 메서드를 작성해야 한다. 라우트 메서드의 포멧은 아래와 같다.

app.HTTP_METHOD(path, function(req, res) {
  // 요청 처리
})

위 코드에서 HTTP_METHOD는 get, post, put, delete 같은 http 요청 메서드를 말한다. path는 요청을 받을 경로이고, 그 뒤에 나오는 함수가 요청에 대한 핸들러이다. 핸들러의 req는 요청 오브젝트, res는 응답 오브젝트이다. 이 오브젝트들이 제공하는 메서드를 확인하고 싶다면 아래 링크를 참고하자.

 

라우팅 path는 단순 문자열이 아니라 문자열 패턴이나 정규식도 된다. Express는 라우팅 경로를 매칭하기 위해 path-to-regexp 패키지를 사용한다. 자세한 내용은 아래 링크를 참고하자. 예를 들어 아래와 같은 경로의 라우팅도 가능하다.

// '/test', '/test123' 매칭
app.get('/test(123)?', function(req, res) {
  res.send('Test 123')
})
// '.test'로 끝나는 경로 매칭
app.get(/.*\.test/, function(req, res) {
  res.send('Regex Test')
})

 

라우트의 핸들러는 하나 이상 등록 가능하다. 지금까지 예제에서는 하나의 핸들러만 등록했지만, 아래의 코드와 같이 여러개의 핸들러도 등록이 가능하다.

app.get('/handler', function(req, res, next) {
  console.log('Handler1')
  next()
}, function(req, res) {
  console.log('Handler2')
  res.send('Handlers')
})

위 예제에서 next라는 함수는 다음 핸들러로 제어를 넘기는 함수이다. 이 함수를 꼭 실행시켜야 다음 핸들러로 넘어간다. 여러개의 핸들러는 아래처럼 배열로 넘길수도 있다.

const handler1 = (req, res, next) => {
  console.log('Handler1')
  next()
}

const handler2 = (req, res) => {
  console.log('Handler2')
  res.send('Handlers')
}

app.get('/handler', [handler1, handler2])

 

미들웨어

미들웨어는 요청과 응답사이에서 실행되는 코드를 말한다. 사용자 인증 처리, 쿠키 처리, 에러 처리 등을 할 수 있다. 미들웨어는 아래와 같이 정의할 수 있다.

// 모든 요청에 대한 미들웨어
app.use(function (req, res, next) {
  console.log('Middleware1')
  next()
})

위 코드는 모든 요청에 대해서 'Middleware1'이라는 문자열을 터미널에 남기는 미들웨어다. 보면 알겠지만 라우트 메서드와 상당히 유사한데, 라우트 메서드도 미들웨어의 종류 중 하나이다. 미들웨어의 종류는 아래와 같다.

Application

애플리케이션에 요청이 발생되면 실행되는 미들웨어다. 

Router

라우터에 대한 요청이 발생하면 실행되는 미들웨어다. express의 라우터 모듈은 아래에서 설명하겠다.

var app = express();
var router = express.Router();
 
router.use(function (req, res, next) {
  console.log('Router Middleware');
  next();
});

Error

에러에 대한 처리를 하는 미들웨어다. 다른 미들웨어와 다르게 4개의 인자가 필요하다. 다른 미들웨어보다 뒤에 정의돼야한다는 것을 기억하자.

app.use(function(err, req, res, next) {
  res.send(`Error: ${err.message}`)
})

이 때 알아둬야 할 것이 next 함수에 인자를 넣지 않으면 경로에 일치하는 다음 미들웨어가 호출되지만, 인자를 넣으면 에러 핸들러가 호출된다는 것이다. 이를 이용해서 조건별 제어를 할 수 있다.

// '/error-test?text=error' 호출 시 에러 발생
app.get('/error-test', function(req, res, next) {
  const text = req.query.text
  if (!text || text === 'error') {
    next(new Error('Text Error'))
  }

  next()
})

app.get('/error-test', function(req, res) {
  res.send(req.query.text)
})

Basic

정적 자원을 처리하는데 사용되는 미들웨어다. 정적 자원의 디렉토리를 명시할 수 있다.

app.use(express.static('public'));

Third-Party

Express에서 공식적으로 지원하는 미들웨어다. 쿠키, 세션에 대한 미들웨어, CORS 처리를 위한 미들웨어 등이 있다. Express 미들웨어 목록을 확인하고 싶다면 아래 링크를 참고하자.

 


참고

Express 요청 오브젝트

https://expressjs.com/ko/4x/api.html#req

 

Express 4.x - API 참조

Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex

expressjs.com

Express 응답 오브젝트

https://expressjs.com/ko/4x/api.html#res

 

Express 4.x - API 참조

Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex

expressjs.com

path-to-regexp

https://www.npmjs.com/package/path-to-regexp

 

path-to-regexp

Express style path to RegExp utility

www.npmjs.com

Express Third-Party Middleware

http://expressjs.com/ko/resources/middleware.html

 

Express 미들웨어

Express 미들웨어 목록에 적힌 Express 미들웨어 모듈들은 Expressjs 팀이 유지보수합니다. 미들웨어 모듈 설명 내장 함수 (Express 3) body-parser HTTP 요청 body를 파싱합니다. body, co-body, 그리고 raw-body도 참고하세요. express.bodyParser compression HTTP 요청들을 압축합니다. express.compress connect-rid 고유한 요청 ID를 생성합니다. 없음

expressjs.com

 

'프로그래밍 > NodeJS' 카테고리의 다른 글

Express  (0) 2020.01.10
NodeJS  (0) 2020.01.08
댓글
댓글쓰기 폼