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는 미들웨어의 연속동작으로 이루어진다.
예제
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
'백엔드 > node.js' 카테고리의 다른 글
[node] 미들웨어 함수 및 오류처리 (0) | 2022.10.20 |
---|---|
[node] express 이용하여 URL 라우팅 (0) | 2022.10.17 |
[node] HTTP 서버 / 웹 프레임워크 (0) | 2022.10.13 |
[node] 모듈 ( es, os, process, fs ) (0) | 2022.10.12 |
[node] node.js와 npm (0) | 2022.10.12 |