반응형
아직 제대로 공부 못하고 눈치껏 코드 보고 공부하고, 구글링해서 구현하고 있는 node.js다.
백엔드와 통신하기 위한 과정 중에 요청 객체(req)를 사용해 해당 객체 안에 있는 url 등을 꺼내 사용하기도 한다.
사실 잘 모르지만 그래도 자주 쓰는데 계속 까먹어서 일단 기록부터 해야겠다.
정확하게 요청 객체(req), 응답 객체(res)가 뭔지...route란 무엇인지..가 사실은 먼저 기록되어야할 것 같지만, 신입인데 쳐내야할 일이 적지 않은 나에게 기초부터 아주 잘 쌓아올리는게 쉽지는 않아서(그럼에도 불구하고 해야하지만..) 필요한 것부터 기록한다.
요청 객체 (Request)
- 클라이언트의 요청 데이터를 받아온다.
- 일반적으로 req라는 변수로 사용하는데 request 와 같은 다른 이름으로 지어도 상관 없다.
- Methods
- req.params : 이름 붙은 라우트 파라미터를 담는다.
- req.params(name) : 이름 붙은 라우트 파라미터나 GET, POST 파라미터를 담는다. 하지만 여러가지 혼란을 줄 수 있어 사용하는 것을 지양해야한다.
- req.query : GET 방식으로 넘어오는 쿼리 스트링 파라미터를 담고 있다.
- req.body : POST 방식으로 넘어오는 파라미터를 담고있다. HTTP의 BODY 부분에 담겨져있는데, 이 부분을 파싱하기 위해 body-parser와 같은 패키지가 필요하다.
- req.route : 현재 라우트에 관한 정보를 담고 있으며 디버깅 용도로 사용된다.
- req.cookies (req.signedCookies) : 클라이언트가 전달한 쿠키 값을 가진다.
- req.headers : HTTP의 Header 정보를 가지고 있다.
- req.accepts([types]) : 클라이언트가 해당하는 타입을 받을 수 있는지 확인할 수 있다.
- req.ip : 클라이언트의 IP Address를 반환한다.
- req.path : 클라이언트가 요청한 경로로 프로토콜, 호스트, 포트, 쿼리스트링을 제외한 순수 요청 경로를 반환한다.
- req.host : 요청 호스트 이름을 반환하는 메서드로 조작 가능성이 있어 보안 목적으로는 사용하면 안된다.
- req.xhr : 요청이 ajax 호출로 시작되었다면 true를 반환한다.
- req.protocol : 현재 요청의 프로토콜(http, https 등)을 반환한다.
- req.secure : 현재 요청이 보안 요청이면 true를 반환한다.
- req.url (req.originalUrl) : URL 경로와 쿼리 스트링을 반환한다. 원본 요청을 logging하는 목적으로 많이 쓰인다.
- req.acceptedLanguages : 클라이언트가 선호하는 자연어 목록을 반환한다. header에서 파싱하면 다국어를 지원하는 어플리케이션이라면 초기 언어 선택에 도움을 줄 수 있다.
응답 객체 (Response)
- 클라이언트에게 데이터를 전송한다.
- 일반적으로 res나 response라는 이름으로 사용된다.
- Methods
- res.status(code) : HTTP 응답 코드를 설정한다. 응답 코드가 redirect(30x)라면 res.redirect를 쓰는게 낫다.
- res.set(name, value) : 응답 헤더를 설정하는데, 직접 쓸 일은 거의 없다.
- res.cookie(name, value, [options]) : 클라이언트에 저장될 쿠키를 설정하거나 제거한다. cookie-parser 패키지가 필요하다.
- res.redirect([status], url) : redirect. 기본 응답 값은 302다.
- res.send(body), res.send(status, body) : 클라이언트에 응답을 보낸다. 상태 코드는 옵션이다. 기본 콘텐츠 타입은 text/html이므로 text/plain을 보내려면 res.set(‘Content-Type’, ‘text/plain’)을 먼저 호출 해야한다. JSON을 보낼거면 res.json을 쓰자.
- res.json(json), res.json(status, json) : 클라이언트로 JSON 값을 보냄.
- res.jsonp(json), res.jsonp(status, json) : 클라이언트로 JSONP 값을 보냄.
- res.type(type) : Contents-Type 헤더를 설정할 수 있는 간단한 메서드.
- res.format(object) : Accept 요청에 따라 다른 콘텐츠를 전송할 수 있는 메서드. 잘 안 쓸듯.
- res.attachment([filename]), res.download(path, [filename], [callback]) : 클라이언트에게 파일을 표시하지 말고 다운로드 받으라고 전송함. filename을 주면 파일 이름이 명시되며, res.attachment는 헤더만 설정하므로 다운로드를 위한 node 코드가 따로 필요하다.
- res.sendFile(path, [options], [callback]) : path의 파일을 읽고 해당 내용을 클라이언트로 전송한다.
- res.links(links) : Links 응답 헤더를 설정한다. 별로 필요 없을 듯.
- res.locals : 뷰를 렌더링하는 기본 콘텍스트를 포함하는 객체다.
- res.render(view, [locals], callback) : jade와 같은 템플릿 엔진을 사용하여 뷰를 렌더링한다.
반응형