express 미들웨어
// 미들웨어
// 공통되는 코드
app.use((req, res, next) => {
console.log('모든 요청에 실행하고 싶어요');
next(); // 넣어줘야 다음 라우터를 찾아 실행함.
});
라우팅 매개변수
매개변수 라우터는 순서를 지켜줘야 한다.
app.get('/category/:name', (req, res) => {
console.log('res', res);
console.log('req', req.params);
res.send(`hello ${req.params.name}`);
});
만약 매개변수 라우터를 상단에 배치한다면, 그 아래 라우터는 실행이 안된다.
app.get('/category/:name', (req, res) => {
res.send(`hello ${req.params.name}`);
});
// 실행 안됨
app.get('/category/javascript', (req, res) => {
res.send('hello javascript');
});
범위가 넓은 라우터들은 다른 라우터들보다 아래에 위치해야한다.
// 정상작동
app.get('/category/javascript', (req, res) => {
res.send('hello javascript');
});
// 매갸변수 라우팅 아래에
app.get('/category/:name', (req, res) => {
res.send(`hello ${req.params.name}`);
// res.send(`hello wildcard`);
});
// 범위가 넓은 라우터는 맨 아래에
app.get('*', (req, res) => {
res.send('hello everybody')
})
특정 라우터에만 middleware를 실행되게 하고 싶다면,
// about에서만 실행됨 그리고 about을 next로 찾아감
app.use('/about', (req, res, next) => {
console.log('/about에서만 실행하고 싶어요');
next(); // 그리고나서 /about을 찾아감
});
middleware를 여러개 넣을 수 있다.
// 미들웨어
// 공통되는 코드
app.use(
(req, res, next) => {
console.log('1 모든 요청에 실행하고 싶어요');
next();
},
(req, res, next) => {
console.log('2 모든 요청에 실행하고 싶어요');
next();
},
(req, res, next) => {
console.log('3 모든 요청에 실행하고 싶어요');
next();
},
(req, res, next) => {
console.log('4 모든 요청에 실행하고 싶어요');
next();
}
);
// express server start!!
// 1 모든 요청에 실행하고 싶어요
// 2 모든 요청에 실행하고 싶어요
// 3 모든 요청에 실행하고 싶어요
// 4 모든 요청에 실행하고 싶어요
미들웨어 에러처리
app.use(
(req, res, next) => {
console.log('1 모든 요청에 실행하고 싶어요');
next();
},
(req, res, next) => {
throw new Error('에러가 났어요.');
}
);

에러 미들웨어 에러처리
에러 미들웨어(err, req, res, next)는 인자 4개를 반드시 넣어줘야한다.
app.use((err, req, res, next) => {
console.error(err);
res.send('에러났습니다!!!!!!!!!!!!!!!!!!!!!!!');
});
404처리
app.use((req, res, next) => {
res.send('404입니다.')
})
한 라우터에서 여러번 send를 보내면 에러가 난다.
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
res.send('안녕하세요');
res.json({ hello: '123' });
});
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Last updated