Express란?
http 모듈로 웹 서버를 만들 때 코드가 보기 좋지 않고 확장성도 떨어질 때 프레임워크로 해결한다.
Express는 Node.js의 대표적 웹 프레임워크이다.
Express-generator로 설치
express-generator는 express 구조를 빠르게 갖추어 주는 패키지이다.
express-generator 패키지 전역 설치
모든 취약점 해결
- bin/www: 서버를 실행하는 스크립트
- public: 외부에서 접근 가능한 파일들
- routes: 서버의 라우터와 로직들, 추후 데이터베이스에 사용
- views: 템플릿 파일들
- app.js: 핵심 서버 스크립트
Express 서버 실행
콘솔에 클라이언트가 보낸 요청이 기록된다.
미들웨어란?
익스프레스는 미들웨어로 구성된다. 요청과 응답의 중간에 위치하여 미들웨어라고 부른다.
아래는 app.js 코드이다. app.use와 함께 사용된 것은 미들웨어들이다.
// 필요 모듈
var createError = require('http-errors'); // 에러 생성 모듈
var express = require('express'); // 익스프레스 프레임워크
var path = require('path'); // 경로 조작 모듈
var cookieParser = require('cookie-parser'); // 쿠키 파싱 모듈
var logger = require('morgan'); // HTTP 요청 로깅 모듈
// 라우터 모듈
var indexRouter = require('./routes/index'); // 메인페이지 라우터
var usersRouter = require('./routes/users'); // 사용자 관련 라우터
// 익스프레스 애플리케이션 객체 생성
var app = express();
// 뷰 엔진 설정
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// 미들웨어 설정
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// 라우터 설정
app.use('/', indexRouter);
app.use('/users', usersRouter);
// 404 에러 핸들러
app.use(function(req, res, next) {
next(createError(404));
});
// 에러 핸들러
app.use(function(err, req, res, next) {
// 로컬 변수 설정
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// 에러 페이지 렌더링
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
미들웨어 설정 부분을 보면, logger, json, urlencoded, cookieParser, static 미들웨어 등이 장착되어 있다..
app.use와 함께 사용된 라우터와 에러 핸들러도 모두 미들웨어이다.
미들웨어는 위에서부터 아래로 순서대로 실행되며, 요청과 응답 사이에 기능을 추가할 수도 있다.
next()
매개변수 next()는 다음 미들웨어로 넘어가는 함수로, next를 호출해야 다음 코드로 넘어갈 수 있다.
next에 인수로 값을 넣으면 해당 미들웨어로 넘어간다.
next에 route라는 문자열을 넣으면 다음 라우터의 미들웨어로 바로 이동한다.
에러 처리 미들웨어
미들웨어 끝 부분에 에러 처리 미들웨어(핸들러)를 두어 전체적인 에러를 처리한다.
express-generator는 404 처리 미들웨어와 에러 핸들러를 자동 생성한다.
404 에러는 찾고자 하는 페이지(또는 요청 주소)가 없을 때나 라우터로 등록되지 않은 주소로 요청이 들어올 때 발생한다.
에러 핸들러는 서버 쪽에서 발생한 에러를 처리한다.
morgan 미들웨어
위에서부터 봤듯이, 서버로 들어온 요청과 응답을 기록해 주는 미들웨어이다.
logger 함수의 인자로 dev 대신 short, common, combined 등을 줄 수 있다.
미들웨어 만들기
미들웨어를 직접 만들 수 있다.
localhost:3000에 접속하면 콘솔에 내가 만든 미들웨어 문자열이 출력된다.
'전공수업 > Node.js' 카테고리의 다른 글
[Express] 미들웨어 #2 body-parser, cookie-parser, express-session (0) | 2024.06.15 |
---|---|
npm이란 무엇인가 (2) | 2024.06.03 |
[JavaScript] Callback Hell, Promise, async/await (0) | 2024.05.01 |
[JavaScript] 화살표 함수, this, 비구조화 할당 (0) | 2024.05.01 |
[Node.js] 파일 시스템 (0) | 2024.04.30 |
댓글