[Node.js] 익스프레스 - 요청 객체와 응답 객체(파라미터)
익스프레스에서 사용하는 요청 객체와 응답 객체는 http 모듈에서 사용하는 객체들고 같다. 하지만 몇 가지 메소드를 더 추가할 수 있다. 다음은 익스프레스에서 추가로 사용할 수 있는 주요 메소드이다.
send([body]): 클라이언트에 응답 데이터 전송(전송 데이터는 HTML, Buffer 객체, JSON 객체/배열)
status(code): HTTP 상태 코드 반환, end(), send() 같은 전송 메소드를 추가로 호출해야 함
sendStatus(statusCode): HTTP 상태 코드를 상태 메시지와 함께 전송
redirect([status,] path): 웹 페이지 경로를 강제로 이동
render(view [,locals][,callback]): 뷰 엔진을 사용해 문서로 만든 후 전송
send() 메소드는 응답 데이터를 좀 더 간단하게 전송하기 위해 익스프레스에서 추가된 것이다. send() 메소드로 클라이언트에 JSON 데이터를 전송하는 기능을 확인해보자.
파일을 실행한 후 localhost:3000으로 접속하면 JSON 객체를 응답할 것이다. 사실 JSON 객체를 그대로 웹 페이지에 보여주는 경우는 거의 없다. 하지만 모바일 웹 앱이나 일반 앱에서는 화면을 보여주기 위해 필요한 웹 문서들을 단말쪽에 두고 Ajax 또는 웹 소켓으로 데이터만 수신하여 화면에 보여줄 때가 많다. 웹 문서를 새로 불러오는 방식보다 훨씬 효율적이기 때문이다. 따라서 JSON 객체를 전송받는 기능이 필요하다.
만약 sendStatus() 메소드를 사용한다면
코드만 파라미터로 전달할 수도 있다.
이렇게 사용하면 구글로 강제 리다이렉트된다. URL 주소가 아닌 프로젝트 폴더의 다른 페이지를 보여줄 수도 있다.
query: 클라이언트에서 GET 방식으로 전송한 요청 파라미터 확인 예) req.query.time
body: 클라이언트에서 POST 방식으로 전송한 요청 파라미터 확인, body-parser와 같은 외장 모듈 사용해야 함 예) req.body.name
header(name): 헤더 확인
클라이언트에서는 요청 파라미터를 함께 보낼 수 있다. 이때 GET 방식으로 요청했다면 요청 파라미터들은 요청 객체의 query 객체 안에 들어간다.
예를 들어, http://localhost:3000/?name:zini 로 접속한 경우 var pName = req.query.name; 으로 확인할 수 있다. 코드로 작성해보자.
주소 문자열에 포함시켜 전달하는 요청 파라미터를 req 객체의 query 객체 안에 넣어둔다. 클라이언트가 요청할 때 전달되는 헤더 값들은 header 메소드로 확인할 수 있다. 이제 브라우저에서 localhost:3000/?name:zini 로 접속해보자. 다음 결과를 볼 수 있다.
send([body]): 클라이언트에 응답 데이터 전송(전송 데이터는 HTML, Buffer 객체, JSON 객체/배열)
status(code): HTTP 상태 코드 반환, end(), send() 같은 전송 메소드를 추가로 호출해야 함
sendStatus(statusCode): HTTP 상태 코드를 상태 메시지와 함께 전송
redirect([status,] path): 웹 페이지 경로를 강제로 이동
render(view [,locals][,callback]): 뷰 엔진을 사용해 문서로 만든 후 전송
send() 메소드는 응답 데이터를 좀 더 간단하게 전송하기 위해 익스프레스에서 추가된 것이다. send() 메소드로 클라이언트에 JSON 데이터를 전송하는 기능을 확인해보자.
var express = require('express'), http = require('http');
var app = express();
app.use(function(req, res, next){
console.log('첫 번째 미들웨어 요청 처리');
res.send({name:'zini', age:24});
});
http.createServer(app).listen(3000, function(){
console.log('Express 서버가 3000번 포트에서 시작');
})
| cs |
파일을 실행한 후 localhost:3000으로 접속하면 JSON 객체를 응답할 것이다. 사실 JSON 객체를 그대로 웹 페이지에 보여주는 경우는 거의 없다. 하지만 모바일 웹 앱이나 일반 앱에서는 화면을 보여주기 위해 필요한 웹 문서들을 단말쪽에 두고 Ajax 또는 웹 소켓으로 데이터만 수신하여 화면에 보여줄 때가 많다. 웹 문서를 새로 불러오는 방식보다 훨씬 효율적이기 때문이다. 따라서 JSON 객체를 전송받는 기능이 필요하다.
status() 메소드
status()와 sendStatus() 메소드를 사용하여 상태 코드를 전송할 수 있다. status() 메소드는 상태 코드를 작성만 하는 것이므로 전송하려면 send() 메소드를 추가로 호출해야 한다.
res.status(403).send('Forbidden');
| cs |
만약 sendStatus() 메소드를 사용한다면
res.sendStatus(403);
| cs |
코드만 파라미터로 전달할 수도 있다.
redirect() 메소드
redirect() 메소드를 사용하면 다른 페이지로 이동할 수 있다. 예로 로그인을 하지 않은 상태로 메뉴 페이지에 접속하려고 할 때 redirect() 메소드로 강제로 페이지를 옮겨갈 수 있다.
res.redirect('http://google.com');
| cs |
이렇게 사용하면 구글로 강제 리다이렉트된다. URL 주소가 아닌 프로젝트 폴더의 다른 페이지를 보여줄 수도 있다.
render() 메소드
render() 메소드는 뷰 엔진을 사용해 템플릿 파일 안에 있는 내용을 HTML 페이지로 바꾼 후 그 결과물을 전송한다. 나중에 뷰 템플릿 부분에서 자세히 설명하겠다.요청 객체와 파라미터
익스프레스에서 요청 객체에 추가한 헤더와 파라미터를 살펴보자.query: 클라이언트에서 GET 방식으로 전송한 요청 파라미터 확인 예) req.query.time
body: 클라이언트에서 POST 방식으로 전송한 요청 파라미터 확인, body-parser와 같은 외장 모듈 사용해야 함 예) req.body.name
header(name): 헤더 확인
클라이언트에서는 요청 파라미터를 함께 보낼 수 있다. 이때 GET 방식으로 요청했다면 요청 파라미터들은 요청 객체의 query 객체 안에 들어간다.
예를 들어, http://localhost:3000/?name:zini 로 접속한 경우 var pName = req.query.name; 으로 확인할 수 있다. 코드로 작성해보자.
var express = require('express'), http = require('http');
var app = express();
app.use(function(req, res, next){
console.log('첫 번째 미들웨어 요청 처리');
var userAgent = req.header('User-Agent');
var pName = req.query.name;
res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
res.write('<h1>Express 서버에서 응답한 결과</h1>');
res.write('<div><p>User-Agent: ' + userAgent + '</p></div>');
res.write('<div><p>Param Name: ' + pName + '</p></div>');
res.end();
});
http.createServer(app).listen(3000, function(){
console.log('Express 서버가 3000번 포트에서 시작');
})
| cs |
주소 문자열에 포함시켜 전달하는 요청 파라미터를 req 객체의 query 객체 안에 넣어둔다. 클라이언트가 요청할 때 전달되는 헤더 값들은 header 메소드로 확인할 수 있다. 이제 브라우저에서 localhost:3000/?name:zini 로 접속해보자. 다음 결과를 볼 수 있다.
댓글 없음: