이번글에서는 Express를 사용하면 유용한 MiddleWare들에 대해 소개합니다.
MiddleWare는 Node.js Express WebServer에 기능을 추가 하는 모듈입니다. 미들웨어는 HTTP Request와 Reponse주기 사이에서 자동 호출됩니다.
Express 미들웨어 기능은 다음과 같은 다양한 용도로 사용할 수 있습니다.
로깅 요청
요청 데이터 파싱(예: JSON 또는 양식 데이터)
사용자 인증
보안 정책 시행(예: CORS)
오류 처리
express.json()
express.json()은 Request Body에서 들어오는 JSON 데이터를 구문 분석하고 req.body 개체에서 사용할 수 있도록 g해주는 미들웨어 함수입니다. Express 4.6.10버전부터 내장되어 있어 별다른 패키지 없이 사용합니다. express-generator를 이용해서 템플릿을 생성한 경우 app.js에서 express.json() 미들웨어를 사용하고 있습니다.
const express = require('express');
const app = express();
// Parse JSON data from incoming requests
app.use(express.json());
// Route handlers
app.post('/users', (req, res) => {
const { name, email } = req.body;
// Handle the request body data
res.send(`User ${name} with email ${email} created`);
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
위와 같이 app.use(express.json()) 한줄을 추가해주면 됩니다. 이전 POST요청 예제에서 req.body를 통해 파라메터를 참조할 수 있던 이유가 express.json() 덕분입니다!
express.urlencoded
express.urlencoded는 Request Body에서 들어오는 urlencoded 데이터를 구문 분석하고 req.body 개체에서 사용할 수 있도록 해주는 미들웨어 함수입니다. 이 미들웨어는 구문 분석된 데이터로 req.body 속성을 채웁니다.
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: false }));
브라우져에서 POST데이터 전송시 urlencoded형식이 많이 사용됩니다. PostMan을 통해 확인해보도록 하겠습니다.
기본 indexRouter에 아래 Handler를 추가합니다.
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/urlbody', function(req, res, next) {
console.log(JSON.stringify(req.body));
res.send(JSON.stringify({
result : req.body
}));
});
module.exports = router;
단순히 Body구문을 String으로 변환하여 콘솔에 출력합니다. PostMan에서 아래 그림처럼 설정한후 테스트를 해봅니다.
express.urlencoded를 사용하면 콘솔에 아래와 같이 출력됩니다.
{"key1":"value1","key2":"value2"}
req.body를 통해 key1, key2에 접근할 수있습니다. 이제 app.js에서 아래 코드를 커멘트 처리합니다.
app.use(express.json());
//app.use(express.urlencoded({ extended: true }));
다시 시작해보면 아래와 같이 req.body에 아무것도 출력되지 않습니다!! 만일 JSON구문만 지원한다면 추가하지 않아도 괜찮습니다.
Morgan
Morgan은 Express 애플리케이션에서 HTTP 요청을 로깅하는 데 사용되는 미들웨어입니다. 사용자 정의 가능한 형식으로 들어오는 요청을 콘솔 또는 파일에 기록하는 데 사용할 수 있습니다.
const express = require('express');
const morgan = require('morgan');
const app = express();
// Log incoming requests to the console
app.use(morgan('dev'));
// Route handlers
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
app.use(morgan('dev')) 추가해 주고 Node.js를 기동합니다. browser에서 접속해보면 아래와 같이 자동으로 Console에 로그를 생성하여 줍니다.
위 예제에서는 morgan의 미리 정의된 형식인 'dev' 를 지정했습니다. 로그를 사용자 지정할 수도 있습니다. 예를 들어 요청 방법, URL, 상태 코드 및 응답 시간을 사용자 지정 형식으로 기록하려면 다음을 수행할 수 있습니다.
logger.token('date', function(req, res, tz) {
return new Date().toLocaleString();
});
logger.token('access', function(req, res, tz) {
return req.ip;
});
logger.format('myformat', '[ :date ] :access :method :url :status :response-time ms');
위 예제는 기본 Format대신 접속시간과 Client IP를 추가한 것입니다. browser에서 접속해보면 아래와 같이 생성하여 줍니다. 이처럼 token을 정의하여 다양한 정보를 출력할 수있습니다.
다음장에서 계속됩니다.
'Node.js' 카테고리의 다른 글
Node.js Socket Programming (1) (0) | 2023.02.18 |
---|---|
Node.js로 Restful API Server 만들기(5) (1) | 2023.02.16 |
Node.js로 Restful API Server 만들기(3) (0) | 2023.02.14 |
Node.js로 Restful API Server 만들기 (2) (0) | 2023.02.13 |
Node.js로 Restful API Server 만들기(1) (0) | 2023.02.12 |