일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 7급경제학
- 주식과채권
- 경제학적설명
- devlift
- 비전공자 개발
- 케이스메소드
- 금융기초
- 주식기초
- 파생금융
- 경제학적개념
- 파생상품
- 9급경제학
- 개발자되기
- 코딩
- 개발자
- 파생경제학
- 채권기초
- 경제학적기초지식
- 하버드MBA
- 배열메소드
- case method
- 경제학기초
- 경제학
- 국내수출
- 콜드콜
- 자바스크립트
- 비전공자 코딩
- 바닐라자바스크립트
- 비전공자개발자
- 문과 개발
- Today
- Total
deVSner
express - app, use, middle-ware, wildcard, 404 처리 미들웨어, 에러 처리 미들웨어 본문
express - app, use, middle-ware, wildcard, 404 처리 미들웨어, 에러 처리 미들웨어
RudeofSun 2020. 8. 29. 20:54
http가 아닌 const express = require('express')를 불러온다
app.set('port', process.env.PORT || 3001) -> 서버에다가 속성을 심는 것
1.
app.use가 미들웨어가 아니라, req, res, next부터 next()까지가 미들웨어다. 라우어도 미들웨어다.
2.
next()가 있기 때문에 라우트를 연결할 수 있다
app.use( (req, res, next) => {
console.log(1)
next()
}, (req, res, next) => {
console.log(2)
next()
}, (req, res, next) => {
console.log(3)
next()
} )
3.
next에 에러가 들어가면 다음 미들웨어로 가는게 아니라, 바로 에러 처리 미들웨어로 넘어간다
app.use((req,ues,next) => {
console.log('요청 실행')
next()
}, (req, res, next) => {
try {
console.log('에러')
} catch(err) {
next(error)
}
}
4.
next에 route라는 키워드를 넣을 수 잇다. 많이 쓰이지는 않다만,
next에 route라는 키워드를 넣을 수 있다.
같은 라우터의 로직이 밑에 남아있더라도, 곧바로 다음 미들웨어로 넘어가게 하는 것.
next 안에 인수가 들어가 있으면 다 에러나는데, 한 가지 예외가 route 다
이걸 언제 활용하냐면, if문으로 조건 분기 처리할 때 쓴다.
다음 미들웨어로 가게 할 지, 아니면 같은 라우터의 남은 로직을 계속 수행시킬 지.
app.get('/', (req, res) => {
res.send('')
next('route')
}, (req,res,next) => {
console.log('hello')
})
4.
와일드카드.
만약 와일드카드 라우터가 일반 라우터보다 위에 있다면, 죄다 와일드카드 라우터에서 다 걸려버린다
express는 위에서 아래로, 왼쪽에서 오른쪽으로, 의 순서가 굉장히 중요하다
app.get('/category/3', (req,res) => {
res.send('ululalala')
})
app.get('/category/:num', (req,res) => {
res.send('hello ${req.params.num')
})
5.
모든 겟요청을 받는다
app.get('*', (req,res) => {
res.send('hello ${req.params.num')
})
6.
해당 라우터의 위치가 중요하다. 아래의 라우터의 위치는, 와일드카드 라우터 밑에, 에러 미들웨어 위, 여야 한다
응답은 에러 객체를 나타내는게 아니다. 위에서 아래로 코드를 실행했을 때, 해당 라우트 주소가 없을 때,
이 라우터가 실행이 된다.
한 가지 주의할 점이, 실제로는 404지만, 브라우저에는 200이라고 상태 코드를 전달할 수가 있다.
즉, 브라우저를 속일 수 있다는거다.
해커들이 에러 코드를 알게 되면, 에러코드는 각각 뜻을 내포하고 있기 때문에 악용의 소지가 있다.
200은 괜찮을 지 몰라도, 400과 500번대의 에러는 각별히 조심해야 한다.
보통은 404로 퉁치는 경우가 많다.
해커들이 뭐가 잘못된건 지 모르게 해야 한다.
app.use((req,res,next) => {
res.status(404).send('404 처리, 에러는 아님')
})
7.
에러 미들웨어는 인수 4개를 다 써야 한다
app.use((err,req,res,next) => {
console.error(err);
res.send('에러')
})
8.
res.writeHead(200, { 'Content-type' : 'text/plain' } )
res.end('안녕하세요')
위의 코드가 express 로 오면 아래로 바뀐다.
res.send('안녕하세요')
express에서도 http 써도 된다 근데 엥간하면 쓰지마라
나중에
res.setHeader('Content-Type', 'text/plain') 이렇게 쓰면 된다 (필요하다면)
res.writeHead(200, { 'Content-Type' : 'application/json' } )
res.end(JSON.stringify( { hello : 'sj' } ))
위의 코드가 express 로 오면 아래로 바뀐다.
res.json( { hello: 'sj' } )
9.
res.json( { hello: 's' } ) <-- 리턴이 아니다. 밑에 콘솔로그가 잇어도 실행이 된다 그냥 응답을 보낼 뿐이다. 함수를 종료하는게 아니다
자바스크립트는 리턴을 해야 종료가 되는거다!