Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- g++ 업데이트
- snmp
- CentOS7
- gcc 업데이트
- 정규식 활용
- centos pyhon 설치
- 백준
- python subprocess
- c3 second
- semanage
- gcc regex
- grafana dashboard
- python os
- c3 축 없애기
- regex_search
- 1697
- c3 축 가리기
- c3 초
- subporcess path
- c++ 정규식
- linux시간으로 변경
- influxdb 설치
- 정규식 문자열 출력
- selinux port 등록
- InfluxDB
- python popen
- 정규식 컴파일
- snmp test
- c3 step graph
- telegraf
Archives
- Today
- Total
리셋 되지 말자
[express] 미들웨어 만들기 본문
미들웨어 만들기
(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 모두 미들웨어이다.
미들웨어를 위에서부터 순차적으로 선언했을 때, 맨 위에부터 미들웨어가 실행이 되고, 해당 경로에 알맞은 미들웨어가 동작하게 된다.
'NodeJS > 생활코딩' 카테고리의 다른 글
[express] 라우터-주소체계변경 (0) | 2020.09.24 |
---|---|
[express] 에러 처리하기 (0) | 2020.09.23 |
[express] 미들웨어 - compression (2) | 2020.09.23 |
[express] 미들웨어 - body parser (0) | 2020.09.23 |
[express] 루트 페이지 작성, pretty url (0) | 2020.09.21 |
Comments