1) Middleware
미들웨어는 Express.js 동작의 핵심으로,
HTTP 요청과 응답사이에서 단계별 동작을 수행해주는 함수다.
2) 미들웨어의 작성과 사용
const middle = (req, res, next) => {
...
next();
}
const middle2 = (req, res, next) => {
...
next()
}
next();
}
위의 코드처럼 req, res, next를 인자로 갖는 함수를 작성하면 미들웨어가 된다.
next() 함수를 통해 다음 미들웨어를 호출하는 것이다.
next() 함수가 호출되지 않으면 미들웨어 사이클이 멈추기 때문에 주의해야한다.
- 어플리케이션 미들웨어
app.use((req, res, next) => {
...
next() // 첫 번째로 실행
})
app.use(middle1); // 두 번째로 실행
app.get('/', (req, res, next) => {
res.send('...') // 세 번째로 실행
})
위 코드와 같이 app.use나 get은 HTTP요청이 들어온 순간부터 적용된 순서대로 동작한다.
- 라우터 미들웨어
router.use(mid);
router.get('/', (req, res, next) => {
res.send('...');
});
app.use((req, res, next) => {
...
next();
});
app.use('/admin', mid)
다음 순서대로 동작한다.
app.use((req, res, next)... -> app.use('/admin, mid) -> router.use -> router.get
라우터 미들웨어는 특정 경로의 라우팅에만 미들웨어를 적용하기 위한 방법이다.
- 오류처리 미들웨어
err, req, res, next 네 가지 인자를 가지며, next 함수에 인자가 전달되면 실행된다.
app.use((req, res, next) =>{
if(!isAdmin(req)) {
next(newError('Not Authorized'));
return;}
next();
});
app.get('/', (req, res, next) => {
res.send('Hello');
});
app.use((err, req, res, next) => {
res.send('Error');
});
처음 app.use의 next 인자에 오류를 넘겨주었으므로 app.get 미들웨어는 패스하고 마지막 오류처리 미들웨어가 실행된다.
- 함수형 미들웨어
const auth = (memberType) => {
return(req, res, next) => {
if(!checkMember(req, memberType)) {
next(newError(`member not ${memberType}`))
return
}
next()
}
}
app.use('/admin', auth('admin'), adminRouter)
app.use('/users', auth('member'), userRouter)
// 코드 출처: 엘리스AI트랙
위 코드의 auth 함수는 미들웨어 함수를 반환하는 함수이다. auth함수 실행 시 미들웨어의 동작이 결정되는 방식으로 작성됐다.
auth()안의 memberType인자로 'admin' 과 'member'가 들어오는데 그 인자값으로 분기를 실행한다.
3) REST API
REST 아키텍처를 준수하는 웹 API라고 한다.
REST는 REpresentational State Transfer의 약자로, 웹에서 자료를 전송하기 위한 표현방법에 대한 아키텍처이다.
API는 Application Programming Interface의 약자로, 서비스나 프로그램 간에 미리 정해진 기능을 실행할 수 있도록 하는 규약이다.
4) JSON
JavaScript Object Notation의 약자로, 자바스크립트에서 객체를 표현하는 표현식이다.
데이터 표현 방식이 간단하고 쉬워서 데이터 전송식으로 주로 사용됨.
다른 포스팅에서도 다뤘지만 JSON은 { key: value }로 표현한다. 파이썬의 딕셔너리와 같다고 보아도 무방하다.
5) Express.js로 REST API 구현하기
그 전에 앞서 , MVC 패턴을 알고가자.
*MVC 패턴
웹 서비스의 가장 대표적인 프로젝트 구성 패턴으로, 프로젝트의 기능들을 어떻게 분리할지에 대한 구성 방법이다.
Model, View, Controller를 구분하여 프로젝트 구조를 구성한다.
Model: 데이터에 접근하는 기능 또는 데이터 그 자체를 의미한다. 데이터의 읽기, 쓰기는 Model을 통해서만 이루어지도록 구성해야 한다.
View: 데이터를 표현하는 기능을 의미한다. Controller에 의해 데이터를 전달받고 화면에 표시해주는 기능을 담당한다.
Controller: Model을 통해 데이터에 접근하여 처리 결과를 View로 전달하는 기능을 의미한다. 주로 라우팅 함수다 이 기능을 수행한다.
(Node.js는 기본적으로 JSON을 처리하는 방법을 가지고 있어서 View는 생략될 수도 있다.)
'Backend > Node.js' 카테고리의 다른 글
Node.js - Express.js와 MongoDB로 웹서비스 만들기 (0) | 2022.02.26 |
---|---|
Node.js - Express.js와 REST API (2) (0) | 2022.02.20 |
Node.js - 웹과 Express.js (0) | 2022.02.20 |
Node.js - NPM과 모듈 (0) | 2022.02.18 |
Node.js 이해 (0) | 2022.02.18 |