반응형

express 프레임워크

express.js

node.js에서 가장 유명한 웹 프레임워크이다.

필요에 따라 미들웨어를 통해유연하게 구조를 설정할 수 있다. 

 

express 설치

npm install express
npm install express --save

또는 express-generator 이용하여 설치

npm i -g express-generator
express project_name

해당 폴더로 이동 후, 서버 실행

npm install
npm start

브라우저로 이동하여 localhost:3000 으로 접근하면 express로 생성된 서버가 실행되는 것을 확인할 수 있다.

 

 

 

 

 


express application

 

간단한 express 앱

 

express( )로 생성된 app 객체에는 Express.js 의 기능을 담고 있다.

즉, Express.js의 모든 동작은 app객체에 정의되어 있다.

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})
node app.js

브라우저에서 http://localhost:3000/ 로 접속한다.

 

 

 

 

app 객체

  • app.use( ) 함수: 미들웨어를 사용하기 위한 함수. http request 메서드 모든 것을 처리함.
  • app.listen( port_num , callback_fun ): http 서버를 생성해주는 함수. (express-generator를 이용하면 http.createServer를 사용하는데 app.listen( ) 함수로 대체 가능하다.)
  • app.locals 변수: app에서 사용할 공통상수. Express.js에선 global 변수를 선언하지 않고 이 값을 사용할 수 있다.

 

next()

현재의 미들웨어 함수가 요청-응답 주기를 종료하지 않는 경우에는 

next()를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 한다. 

그렇지 않으면 해당 요청은 정지된 채로 방치됨.

 

 

 

 

 


기본 라우팅

 

(1) app 라우팅

URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST.. 등)에 대해 어플리케이션이 응답하는 방법을 결정하는 것.

라우트가 일치하면 핸들러 함수가 실행된다.

app.METHOD(PATH, HANDLER)
  • app : express의 인스턴스
  • METHOD : HTTP 요청 메소드( POST, GET, PUT, DELETE)
  • PATH : 서버에서의 경로
  • HANDLER : 라우트가 일치하면 실행할 함수. 요청을 확인하고 응답을 보내는 역할을 한다.

 

라우트 예제

'/' 홈 페이지에서 Hello World!로 응답:

app.get('/', function (req, res) {
  res.send('Hello World!');
});

 

애플리케이션의 홈 페이지인 루트 라우트(/)에서 POST 요청에 응답:

app.post('/', function (req, res) {
  res.send('Got a POST request');
});

 

/user 라우트에 대한 PUT 요청에 응답:

app.put('/user', function (req, res) {
  res.send('Got a PUT request at /user');
});

 

/user 라우트에 대한 DELETE 요청에 응답:

app.delete('/user', function (req, res) {
  res.send('Got a DELETE request at /user');
});

 

 

 

(2) Express.Router 라우팅

app 라우팅을 통해서는 라우팅의 핵심인 그룹화를 지원하지 않는다. Express.Router 는 라우팅을 모듈화 할 수 있다.

 

express.Router( )로 생성한 router객체 역시 app객체처럼 get/put/post/delete 함수를 사용할 수 있다.

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

router.get('/', (req, res, next) => {
	res.send('respond with a resource;);
});

module.exports = router;

app 객체: 정의된 url 과 완벽하게 일치한 요청에만 라우팅 된다.

router객체: url 끝과 동일한 요청에 라우팅 된다.

// 작성한 모듈 불러옴.
const userRouter = require("./routes/users");

// express 객체인 app의 use( )함수를 이용해 라우터 설정함.
const app = express();
app.use('/users', userRouter);


---------------------------------------------------------


// 작성한 모듈 불러옴
const petRouter = require('./pets');

// Router 객체인 router의 use( )함수를 이용해 라우터 설정.
const router = express.Router();
router.use('/pets', petRouter);


module.exports = router;

 

 

 

 


라우팅 path parameter

 

 

라우팅 path parameter

path parameter를 사용하면, 주소의 일부를 변수처럼 사용할 수 있다.

 

/user/:id

  • localhost:3030/user/1
  • localhost:3030/user/2

이런 식으로 id변수의 값을 url 주소에서 받아올 수 있다.

 

/messages/:from-:to

  • localhost:3030/messages/1-100
  • localhost:3030/messages/1-5000

from 변수와 to 변수의 값을 url 주소에서 받아올 수 있다.

 

 

 

 

 


Request handler 

핸들러 함수란,

라우트가 일치하면 실행할 함수이고, 요청을 확인하고 응답을 보내는 역할을 한다.  req/res/next로 구성된다.

router.get('id', (req, res, next) => {
    const id = req.params.id
    res.send(`hello ${id}`);
});

 

 

req : request 객체

HTTP 요청정보를 가진 객체로, path parameter / query parameter, body, header 등을 확인할 수 있다.

  • req.params : /path/:id  URL 표현 중 :id를 req.params.id 이렇게 사용 가능하다.
  • req.queries : /path?page=2 URL 표현 중 page를 req.queries.page 이렇게 사용 가능하다.
  • req.body : POST 요청을 받으면 req.body에 요청 데이터가 저장되어 들어온다.
  • req.get(' ') : HTTP Request 의 헤더값을 가져올 수 있다. req.get('Authorization') 등으로 값을 가져온다.

 

res : response 객체

HTTP 응답을 처리하는 객체로, 응답에 대한 데이터를 전달하거나 응답상태(200) 및 헤더를 설정할 수 있다.

  • res.send( ) : text 형식의 HTTP 응답을 전송함.
  • res.json( ) : json 형식의 HTTP 응답을 전송함
  • res.render( ) : HTML Template를 사용하여 화면을 전송함.
  • res.set( ) : HTTP 응답의 헤더를 설정함
  • res.status( ) : HTTP 응답의 상태값을 설정함.

 

 

 


미들웨어

부가적인 기능이나 처리를 제공하는 목적을 갖는다. 

express.js에서 사용할 수 있는 중간처리 목적의 소프트웨어/모듈이다.

최종 요청 핸들러 이전의 express 라우팅 계층에 의해 호출되는 함수이다.

 

express는 미들웨어의 연속동작으로 이루어진다.

출처 expressjs.com

 

예제

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

var myLogger = function (req, res, next) {
  console.log('LOGGED');
  next();
};

app.use(myLogger);

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);

 

 

 

 

참고: https://expressjs.com/ko/guide/writing-middleware.html

 

Express 앱에서 사용하기 위한 미들웨어 작성

Express 앱에서 사용하기 위한 미들웨어 작성 개요 미들웨어 함수는 요청 오브젝트(req), 응답 오브젝트 (res), 그리고 애플리케이션의 요청-응답 주기 중 그 다음의 미들웨어 함수 대한 액세스 권한

expressjs.com

 

 


 

에러 핸들링

4개의 인자가 필요하며, 인자의 숫자로 오류처리 미들웨어를 판별한다.

function errorHandler(err, req, res, next) {
  if (res.headersSent) {
    return next(err);
  }
  res.status(500);
  res.render('error', { error: err });
}

 

 

참고 

https://expressjs.com/ko/guide/error-handling.html

 

Express 오류 처리

오류 처리 다른 미들웨어 함수와 동일한 방법으로 오류 처리 미들웨어 함수를 정의할 수 있지만, 오류 처리 함수는 3개가 아닌 4개의 인수, 즉 (err, req, res, next)를 갖는다는 점이 다릅니다. 예를

expressjs.com

반응형

+ Recent posts