■ node.js 요청 과 응답 객체


▶ 요청 객체

: 요청 객체는 일반적으로 콜백에 전달되므로 이름은 원하는대로 정해도 됩니다. 보통 req나 request를 사용합니다. 요청 객체는 핵심 노드 객체인 http.IncomingMessage 인스턴스에서 시작하며, 익스프레스를 사용하는 경우 익스프레스에서 기능을 추가합니다.


* req.params :  이름 붙은 라우트 매개변수를 담고 있는 배열입니다.


* req.param(name) : 이름 붙은 라우트 매개변수나 GET, POST 매개변수를 반환합니다.


* req.query : 쿼리스트링 매개변수(GET 매개변수라고도 합니다.)를 이름/값 쌍 형태로 담고 있는 객체 입니다.


* req.body : POST 매개변수를 담고 있는 객체입니다. 이런 이름이 붙는 이유는, POST 매개변수는 쿼리스트링 매개변수처럼 URL에 들어 있지 않고 REQUEST 본문에 들어 있기 때문 입니다.


* req.route : 현재 일치한 라우트에 관한 정보입니다. 주로 라우트 디버그에 유용합니다.


* req.cookies, req.signedCookies : 클라이언트에서 전달한 쿠키 값을 담고 있는 객체 입니다.


* req.headers : 클라이언트에서 받은 요청 헤더 입니다.


* req.accepts([types]) : 클라이언트가 주어진 타입을 받는지 확인하는 간편 메서드 입니다. 옵션인 types 에는 application/json 같은 마임 타입이나, 쉼표로 구분한 목록, 배열을 쓸 수 있습니다. 이 메서드는 공용 API를 만드는 사람에게 유용하며, 브라우저가 항상 기본값으로 HTML을 받는다고 가정 합니다.


* req.ip : 클라이언트의 IP 주소 입니다.


* req.path : 프로토콜, 호스트, 포트, 쿼리스트링을 제외한 요청 경로 입니다.


* req.host : 클라이언트에서 보고한 호스트 이름을 반환하는 간편 메서드 입니다. 이 정보는 조작될 수 있으므로 보안 목적에 사용해서는 안 됩니다.


* req.xhr : 요청이 AJAX 호출에서 시작 됐다면 true를 반환하는 간편 프로퍼티 입니다.


* req.protocol : 현재 요청을 만드는 데 사용된 프로토콜 입니다.


* req.secure : 보안 연결 이면 true를 반환하는 간편 프로퍼티 입니다. req.protocol === 'https' 와 동등 합니다.


* req.url, req.originalUrl : 이들 프로퍼티는 조금 유명 무실한데, 경로와 쿼리스트링을 반환(프로토콜, 호스트, 포트는 제외)합니다. req.url은 내부 라우팅 목적으로 고쳐 쓸 수 있지만 req.originalUrl은 원래 요청과 쿼리스트링을 보관할 목적으로 만들어 졌습니다.


* req.acceptedLanguages : 클라이언트가 선호하는 자연어 목록을 배열로 반환하는 간편 메서드 입니다. 이 정보는 요청 헤더에서 파싱 합니다.


▶ 요청 객체

: 응답 객체는 일반적으로 콜백에 전달되므로 이름은 원하는 대로 정해도 됩니다. 보통 res나 resp, response를 사용합니다. 응답 객체는 핵심 노드 객체인 http.ServerResponse 인스턴스에서 시작하며, 익스프레스를 사용하는 경우 익스프레스에서 기능을 추가 합니다. 


* res.status(code) : HTTP 상태 코드를 설정합니다. 익스프레스의 기본값은 200(성공) 이므로 404(찾을 수 없음)나 500(내부 서버 오류), 기타 상태 코드를 반환하려면 이 메서드를 써야 합니다. 리다이렉트(상태코드 301,302,303,307)에는 redirect 메서드가 유용 합니다.


* res.set(name, value) : 응답 헤더를 설정합니다.


* res.cookie(name, value, [options[) , res.clearCookie(name, [options]) : 클라이언트에 저장될 쿠기를 설정하거나 제거합니다. 미들웨어 지원이 필요합니다.


* res.redirect([status], url) : 브라우저를 리다이렉트합니다. 기본 리다이렉션 코드는 302(찾았음) 입니다. 페이지를 영구히 이동했다면 코드 301(영구 이동)을 써야 하고, 그외에는 일반적으로 리다이렉션을 최소화 하는 것이 좋습니다.


* res.send(body), res.send(status, body) : 클라이언트에 응답을 보내며, 상태 코드는 옵션 입니다. 익스프레스 기본 콘텐츠 타입은 text/html이므로, 예를 들어 text/plain으로 바꾸려면 res.send를 호출하기 전에 먼저 res.set('Content-Type', 'text/plain')을 호출해야 합니다. body가 객체 또는 배열이라면 응답으로 JSON이 사용되므로(컨텐츠 타입은 자동으로 바뀝니다.) JSON을 보낼 거라면 명시적으로 res.json을 쓰길 권합니다.


* res.json(json), res.json(status, json) : 클라이언트에 JSON을 보내며, 상태 코드는 옵션 입니다.


* res.jsonp(json), res.jsonp(status, json) : 클라이언트에 JOSNP를 보내며, 상태 코드는 옵션 입니다.


* res.type(type) : Content-Type 헤더를 설정하는 간편 메서드 입니다. 기본 적으로 res.set('Content-Type', type)과 동등하지만, 슬래시 없는 문자열을 매개 변수로 넘기면 이를 확장자로 간주하고 대응하는 인터넷 미디어 타입으로 설정하는 추가 기능이 있습니다. 예를 들어 res.type('txt')은 Content-Type 을 text/plain으로 설정합니다. 종류가 다른 멀티미디어 파일들을 자동으로 서비스할 때 등 이런 기능이 유용할 때도 있지만, 일반적으로 정확한 인터넷 미디어 타입을 명시적으로 설정하는 편이 좋습니다.


* res.format(object) : Accept 요청 헤더에 따라 다른 콘텐츠를 전송할 수 있는 메서드 입니다. 이 메서드는 주로 API에서 쓰입니다.


* res.attachment([filename]), res.download(path, [filename], [callback]) : 이 두 메서드는 모드 응답 헤더 Content-Dispostion를 attachment로 설정 합니다. 이 값은 브라우저에서 콘텐츠를(화면에) 표시하지 않고 내려 받으라는 뜻 입니다. filename을 브라우저에 힌트로 제공할 수 있습니다. res.download는 내려 받을 파일을 지정할 수 있지만, res.attachment는 헤더를 설정할 뿐이므로 콘텐츠를 클라이언트에 전송하는 코드가 따로 필요합니다.


* res.sendFile(path, [options], [callback]) : 이 메서드는 path의 파일을 읽고 그 콘텐츠를 클라이언트에 전송합니다. 이 메서드를 쓸일은 거의 없습니다. static 미들웨어를 쓰고 클라이언트로 보낼 파일은 public 디렉터리에 넣으면됩니다. 하지만 같은 URL에서도 조건에 따라 다른 자원을 전송한다면 이 메서드가 편리할 수 있습니다.


* res.links(links) : Links 응답 헤더를 설정 합니다. 이 헤더는 특수한 헤더이며 애플리케이션 대부분에서 별 필요가 없습니다.


* res.locals, res.render(view, [locals], callback) : res.locals는 뷰를 렌더링하는 기본 콘텍스트가 들어 있는 객체 입니다. res.render는 설정된 템플릿 엔진을 써서 뷰를 렌더링 합니다. res.render의 기본 응답 코드는 200 입니다. 다른 응답 코드를 쓰려면 res.status를 사용 하면 됩니다.


▶ 추가 정보 확인

익스프레스 API 문서 : http://expressjs.com/api.html

- 익스프레서 소스 : https://github.com/visionmedia/express/tree/master

- 노드 문서 : http://nodejs.org/api/http.html



Posted by 빈이아빠 mobile

댓글을 달아 주세요