일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CentOS
- 자바
- 연결리스트
- for문
- Linked List
- 안드로이드 빌드 안됨
- 깃
- 운영체제
- AI
- 인텔리제이
- Intellij
- Linux
- marquee
- CentOS7
- 인공지능
- GIT
- 잠시만조용히
- gitbash
- 안드로이드 빌드 안될때
- MUI
- While문
- 아오
- 반복문
- 백틱
- 한글깨짐
- 로그
- Vue
- rufus
- 부팅디스크
- 핫모듈
- Today
- Total
새끼 개발자의 Life is egg
[Node.js] 미들웨어와 공통 로직 본문
세션이 없는 상태에서 데이터 요청시 권한이 없다는 응답을 주려고
app.get, app.post 마다
res.status(401).json({message: '권한이 없음'});
이걸 쓰는건 좀 아니잖아...
미들웨어는 express에서 요청과 응답을 처리하는 기능이다.
애플리케이션과 라우터 수준에서 미들웨어가 처리하는 요청은 use, get, post, put 이 있고,
여기에 req, res, next 3개의 인수를 넣는다.
req는 요청객체, res는 응답객체, next는 다음 미들웨어로 넘어갈때 사용하는 함수이다.
app.use((req, res, next) => {
});
모든 요청이 이 미들웨어를 먼저 거치게 된다.
공통 로직이 필요하면 여기에 작업을 해주고 next() 를 사용한다.
app.get('/', (req, res, next) => {
});
'/' 으로 접근하는 get 요청에 대한 처리를 한다.
그런데 미들웨어에 err 까지 4개의 인수를 넣는다면 어떨까!
e!
r!
r!
app.use((err, req, res, next) => {
res.status(err.status || 500).json({message: err.message})
});
맨 앞에 err 인수가 추가되었다.
이렇게 만들면 오류 처리 미들웨어가 된다.
모든 요청에서 공통으로 처리할 오류를 여기에 작성하면 된다.
오류 처리 미들웨어를 작성할 때 주의할 사항은
모든 use()와 라우트 코드 다음에 위치해야 한다는 점이다.
그냥 맨 아래에 넣어주면 된다.
app.get('/gg', (req, res, next) => {
if (세션이 있으면) {
res.status(200);
next();
} else {
next(new Error('그런거 없다.'));
}
}, (req, res, next) => {
res.send('드... 드리겠습니다!');
});
res.end(), res.send(), res.json() 를 사용해서 요청에 응답 완료 처리를 해준다.
res.end() 는 요청에 응답을 완료할 때 사용하고
res.send(), res.json()은 데이터를 보낼 때 사용하는데, 내부에 end() 가 들어있어서 자동으로 응답 완료가 된다.
다음 미들웨어로 보낼 때는 next() 를 사용하면 되는데,
이 때 next() 안에 인자를 담아주면
만들어두었던 오류 처리 미들웨어로 이동한다.
'개발's egg > Javascript' 카테고리의 다른 글
css 변수 js에서 사용하기 (0) | 2023.10.24 |
---|---|
[Node.js] Crypto pbkdf2 비밀번호 암호화 (0) | 2023.10.20 |
[MUI] Modal 안의 TextField에 useRef focus 안될 때 (0) | 2023.10.06 |
express-session 계속 새로운 세션만 만들어낼 때. 그리고 쿠키는 왜 안오지 (0) | 2023.09.26 |
노드 버전 여러개 사용하기 (0) | 2023.09.18 |