[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 데이터를 전송하는 기능을 확인해보자.

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(3000function(){
    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(3000function(){
    console.log('Express 서버가 3000번 포트에서 시작');
})
cs

주소 문자열에 포함시켜 전달하는 요청 파라미터를 req 객체의 query 객체 안에 넣어둔다. 클라이언트가 요청할 때 전달되는 헤더 값들은 header 메소드로 확인할 수 있다. 이제 브라우저에서 localhost:3000/?name:zini 로 접속해보자. 다음 결과를 볼 수 있다.

댓글 없음:

Powered by Blogger.