NodeJS/생활코딩
[express] 미들웨어 만들기
kyeongjun-dev
2020. 9. 23. 18:33
미들웨어 만들기
(expressjs.com/en/guide/writing-middleware.html)공식 사이트의 middleware function mylogger 예시를 보면 미들웨어를 만드는 법과 사용법을 간단하게 알 수 있다.
미들웨어 코드
- code
app.use(function(req, res, next){
db.query('SELECT * FROM topic', function (error, topics) {
req.topics = topics;
next();
});
});
미들웨어는 함수이며, app.use의 인자로 사용할 수 있다. 이때 함수는 request, response, next를 인자로 가지며, next()는 다음 미들웨어를 가르킨다고 이해하면 될것 같다.
- 실제 적용
//상세 보기 페이지
app.get('/page/:pageId', (req, res) => {
console.log(req.topics);
//console.log(req.params.pageId);
db.query('SELECT * FROM topic', function (error, topics) {
if (error) throw error;
db.query('SELECT * FROM topic WHERE topic.id = ?', [req.params.pageId], function (error2, topic) {
if (error2) throw error2;
db.query('SELECT * FROM author WHERE id = ?', [topic[0].author_id], function (error3, author) {
if (error3) throw error3;
var description = topic[0].description;
var title = topic[0].title;
var list = template.list(topics);
var html = template.html(title, list, `<h2>${title}</h2>${description}<p>by ${author[0].name}</p>`, `<a href="/create">create</a>
<a href="/update/${topic[0].id}">update</a>
<form action="/delete_process" method="POST">
<input type="hidden" name="id" value="${topic[0].id}">
<input type="submit" value="삭제">
</form>`);
res.send(html);
});
});
});
});
미들웨어를 등록한 뒤, 상세 페이지를 가게되면 DB의 topic 테이블의 게시글 목록이 출력된다.
app.use app.get app.post
app.use는 모든 요청에 대하여 정의하는 미들웨어이다.
- app.use
app.use(function(req, res, next){
db.query('SELECT * FROM topic', function (error, topics) {
req.topics = topics;
next();
});
});
만약 get 방식으로된 요청에만 미들웨어가 동작하도록 하기 위해서라면 아래와 같이 수정할 수 있다.
- app.get
app.get('*', function(req, res, next){
db.query('SELECT * FROM topic', function (error, topics) {
req.topics = topics;
next();
});
});
'*'은 get 요청에 한해서 모든 경로에 대하여 미들웨어를 실행한다는 것이다.
어디서 많이 본 방식인데, 지금까지 express로 작성한, 라우팅을 하기 위해 사용한 app.get, app.post 모두 미들웨어이다.
미들웨어를 위에서부터 순차적으로 선언했을 때, 맨 위에부터 미들웨어가 실행이 되고, 해당 경로에 알맞은 미들웨어가 동작하게 된다.