app.use(( req, res, next ) => {
console.log('모든 요청에 실행하고 싶어요');
next();
})
위 코드에서 정확하게 미들웨어는 use가 아닌 안의 함수 (req, res, next) => { console.log(), next()} 가 미들웨어가 된다.

app.use((req, res, next) => { // 이런 식으로 미들웨어를 동시에 삽입도 가능
console.log("모든 요청에 실행하고 싶어요")
next()
}, (req, res, next) => {
console.log("모든 요청에 실행하고 싶어요22")
next()
}, (req, res, next) => {
console.log("모든 요청에 실행하고 싶어요33")
next()
})
위 처럼 미들웨어를 여러개 연달아 쓸 수 도 있다.
node는 에러처리를 자동으로 해주기 때문에 밑의 코드처럼 에러가 나면 화면에 바로 저렇게 보이게 된다.
next()
}, (req, res, next) => {
throw new Error("에러가 났어요")
})

하지만 사용자입장에서 저런 에러가 화면에 바로 보이는 것은 안 좋기 때문에 에러 처리를 따로 해준다. 이 에러 처리 또한 커스텀하여 에러 미들웨어를 통해 해준다.
app.use((err, req, res, next) => {
console.error(err);
res.send("에러가 발생하였습니다.")
})
에러 미들웨어는 인자 4개를 다 써주어야 함 (생략 불가능)
만약 인자를 하나 빼게 되면 일반 미들웨어가 되어버리니깐 주의!!
왜냐하면 js에서는 인자의 개수에 따라 다른 함수가 되어버리기 때문
app.get('/', (req, res) => {
console.log("렌더링 됬어요")
res.sendFile(path.join(__dirname, 'index.html'));
});
app.post('/', (req, res) => {
res.send('hello express');
});
app.get('/about', (req, res) => {
res.send('hello express');
});
app.use((req, res, next) => {
res.send('404지롱')
})
위 처럼 모든 요청의 라우터 주소들과 일치하지 않으면 404에러가 뜨는데, 와일드카드나 동적라우팅 처럼 모든페이지 접근 가능한 것이 없으면 404에러가 뜨기 때문에 app.use로 404처리를 해줄 수 있다.
또는
app.use((req, res, next) => {
res.status(404).send('404지롱')
})
app.use((req, res, next) => {
res.status(200).send('200 이지롱')
})
위 처럼 res.status(숫자) 로 에러의 숫자일 때 지정도 가능
따라서 특정한 에러가 뜰 때마다 어떠한 행동을 해줄 지 구현 가능!!
해커들이 에러 코드 및 숫자 (400,404,500)을 보고 해당 취약 부분만 집중적으로 팔 수 있으니, 에러일 때 숫자를 무조건 200으로만 보여주게 하는 방법으로 보안을 강화하는 방법도 있음
send관련 응답은 한 번만!!
app.get('/', (req, res) => {
console.log("렌더링 됬어요")
res.sendFile(path.join(__dirname, 'index.html'));
res.send('안녕하세요.')
res.json({ hello: 'mumu'})
});
위 처럼 get과 같은 한 라우터에서 send관련된 것이 두 번 이상 나오면 'Cannot set headers after they are sent to the client' 오류가 남.
추가로 미들웨어도 마찬가지 임
app.use((req, res, next) => { // 이런 식으로 미들웨어를 동시에 삽입도 가능
console.log("모든 요청에 실행하고 싶어요")
res.send("똥똥")
})
app.get('/', (req, res) => {
console.log("렌더링 됬어요")
res.sendFile(path.join(__dirname, 'index.html'));
});
위 와같이 해도 동일한 에러가 나옴. 즉 미들웨어, 라우터 포함 send는 무조건 하나!
왜냐하면 요청 한번에 응답 한번이 나와야 되는데 여러번 응답을 보내주기 때문에 에러가 나옴
응답 후에 헤드 오류
app.get('/', (req, res) => {
console.log("렌더링 됬어요")
res.sendFile(path.join(__dirname, 'index.html'));
res.writeHead(200, {})
});
위와 같이 이미 응답을 보낸 후에 head를 보내면 오류가 남, 순서가 잘못 됨
그리고 writeHead는 http 식이기 때문에, express 식으로 코드를 바꿔줘야함
res.writeHead => res.setHeaer('Content-Type', 'text/html')
함수종료 오류
app.get('/', (req, res) => {
res.json({ hello: 'mumu'})
console.log("aa")
});
위와 같이 하면 console은 실행이 된다. 흔히 res.json이든, send든 응답을 보내주었다 해서 함수가 끝난 것이 아님, return이 아니기 때문에 종료가 아님, 잘 기억해둘 것