Express in Response
익스프레스에서 응답 객체에 대한 이야기를 하고자 한다.
서버가 전송하는 응답에 브라우저는 상태코드
그리고 헤더
가 필요하다.
상태코드 목록은 다음과 같다.
코드명 | 내용 |
---|---|
1xx | 정보로 분류되며 서버가 임시적 응답을 전달할때 사용 |
2xx | 서버의 리소스 요청이 성공했음을 전달할때 사용 |
3xx | 리다이렉션으로 분류되며, 추가적인 액션에 사용하는 정보를 나타낼때 사용 |
4xx | 클라이언트 에러로 분류되며 에이전트가 서버에게 에러가 담긴 요청을 했다고 알려줄때 사용 |
5xx | 서버 에러로 분류되며 요청이 서버 내부에서 끝까지 실행되지않았음을 브라우저에 알릴때 사용 |
express 에서 상태 코드 설정은 status 함수를 통해 가능하다.
하지만 상태 코드만 발송해서 응답을 처리하기엔 부족하기 떄문에 체인방식으로 render나 send
같은 함수들과 함께 사용한다.
res.status(200).send('success');
res.send(200,'success');
// many kind of..
익스프레스에서는 send, json, sendfile, download, render, redirect 등에
응답함수중 하나를 선택해 응답을 전송할수 있고 응답함수를 아무것도 호출하지 않으면
요청은 커넥션 타임아웃이 발생할때까지 요청 상태를 계속 유지한다.
라우트 핸들러에선 응답함수가 여러개 있을경우 최초 첫번째 응답 함수만 호출하고
나머지는 런타임 에러를 발생시킨다.
보통 render 함수를 이용해 ejs 나 jade 같은 템플릿 엔진을 랜더해서 보내는데
send를 통해 html 태그를 그대로 보내는 경우도 있다.
직렬방식으로 문자열이 길게 나열되기 때문에 보기 좋진 않은 형태일 것이다.
태그를 정렬 시켜주는 express 의 기능이 있는데 locals 에 있는 pretty 를 설정해주는것 이다.
익스프레스 앱에 다음 코드를 추가 해보자.
app.locals.pretty = true
Content Negotiation
응답 함수중에 format()
이란 함수가 있는데 이것이 이 포스팅에 주된 내용이다.
서버가 요청을 수신했을때 처리할수 있으면 데이터를 브라우저에 맞게 변형하고 처리못할경우
이를 브라우저에 알리는 메커니즘 이다.
app.get('/',function(req, res) {
res.format({
'text/plain' : function() {
res.send('hello')
},
'text/html' : function() {
res.send('<b>hello</b>')
},
'application/json' : function() {
res.json({message:'hello'});
},
'default': function() {
res.send(406, 'Not Acceptable');
}
})
});
//키값을 사용해서 코드를 간결화 시킬수 있다.
app.get('/',function(req, res) {
res.format({
plain : function() {
res.send('hello')
},
html : function() {
res.send('<b>hello</b>')
},
json : function() {
res.json({message:'hello'});
},
default : function() {
res.send(406, 'Not Acceptable');
}
})
});
다음 포스팅 에서 폼, 세션,쿠키에 대해서 정리하면서 익스프레스에 대한
마무리를 하고자한다.
세션에서 언급하고 있는 몽고디비나 레디스에대해서 포스팅할 시간이 있을지 모르겠다.
다음 포스팅은 아마도 알고리즘 일것같다.
'BackEnd > Express.js' 카테고리의 다른 글
Express Basic Essentials - Form,Cookie,Session(END) (0) | 2016.09.07 |
---|---|
Express Basic Essentials - Route (0) | 2016.09.07 |
Express Basic Essentials - init,middleware (0) | 2016.09.07 |