Back Ground

NodeJS - Express의 요청 객체와 응답 객체 [ES5] 본문

Javascript/Node.js

NodeJS - Express의 요청 객체와 응답 객체 [ES5]

Back 2018. 9. 20. 20:34

익스프레스의 요청 객체와 응답 객체에는 메소드가 더 추가되어 있다.


 send([body])

 클라이언트에 응답 데이터를 보냅니다. 전달할 수 있는 데이터는 HTML 문자열, Buffer 객체, JSON 객체, JSON 배열입니다.


 status(code)

 HTTP 상태 코드를 반환합니다. 상태 코드는 end( )send( ) 같은 전송 메소드를 추가로 호출해야 전송할 수 있습니다.

 sendStatus(statusCode)

 HTTP 상태 코드를 반환합니다. 상태 코드는 상태 메시지와 함께 전송됩니다

 redirect([status,] path)

 웹 페이지 경로를 강제로 이동시킵니다.

 render(view [, locals][, callback]

 뷰 엔진을 사용해 문서를 만든 후 전송합니다.



.send()

buffer 객체 Json객체, JSON배열을 보낼때 사용

send랑 write를 함께 사용할 수 없다.


만약 

write를 사용 후  send()를 만나면 에러가 발생한다.


그리고 send는 단 한번만 사용한다.

send(); 후 response를 빠져나온다. 종료 



예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var http = require('http'), express = require('express');
 
var app = express();
 
app.use(function(req,res,next){
    console.log("미들웨어 1");
    
    res.aaa = 1234;
    
    let json = {
        pname: '장동건',
        age : 30,
        tel : '010-1234-5678'
    };
    
    res.send(json); // buffer 객체 Json객체, JSON배열을 보낸다.
    //send랑 write는 함께 쓰면 안됨. 
    //send를 보내면 단방향 끝 return 해버린다. 밑에 wrtie는 안나옴
    
    res.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}); 
    res.write('<p>추석이다</p> '+res.aaa+'<br>');
   
    next(); // req res 가 다음use 매개변수로 들어간다. bean처럼 res req를 다 쓰인다.
});
 
//마지막 미들웨어
app.use(function(req,res,next){
    console.log("미들웨어 2");
    res.write('<p>재밌겠다</p>'+res.aaa);
    res.end('종료다');
});
 
http.createServer(app).listen(3000,function(){
   console.log('서버 기동'); 
});
cs


이렇게 했다면 wirte는 실행되지않는다. 





send는 한번만 실행 후 빠져나오기 때문에

sned를 또 실행 한다고 해도 가장 첫번째 send만 나오게 된다.

예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var http = require('http'), express = require('express');
 
var app = express();
 
app.use(function(req,res,next){
    console.log("미들웨어 1");
    
    res.aaa = 1234;
    
    res.send( json = {// 다른이름 JSON RPC - Ajax 통신 할때 사용하기 좋음.
        pname: '장동건'//send() 한번 데이터 전송
        age : 30,
        tel : '010-1234-5678'
    }); 
    
    //send()는 실행되지않음 한번실행 send한 순간 res 빠져나온다 2차 작업 안함
    res.send( json = {
        pname: '정우성'
        age : 30,
        tel : '010-1234-5678'
    });
    
    res.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}); 
    res.write('<p>추석이다</p> '+res.aaa+'<br>');
    
    next();
});
 
//마지막 미들웨어
app.use(function(req,res,next){
    console.log("미들웨어 2");
    res.write('<p>재밌겠다</p>'+res.aaa);
    res.end('종료다');
});
 
http.createServer(app).listen(3000,function(){
   console.log('서버 기동'); 
});
cs


한번만 실행되기 때문에 

send를 쓰기 좋은건 Ajax 통신에서 Json으로 뽑아 낼때 쓰기 좋다.





sendStatus(code)


Http 상태 코드를 반환 한다.


예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var http = require('http'), express = require('express');
 
var app = express();
 
app.use(function(req,res,next){
    console.log("미들웨어 1");  
   
    res.sendStatus(200);
    
});
 
 
http.createServer(app).listen(3000,function(){
   console.log('서버 기동'); 
});
cs


상태코드를 따로 헤더로 보내고 

바디에 200의 (Http status code) success를 전송한다.


만약 


res.sendStatus(403);

이라면 그 상태코드의 대한 설명이 나온다.






redirect([status,] path)




redirect( 200,/path/address )

 [Http상태 코드 표시 ] ,[경로 ]


웹 페이지를 강제적으로 이동시킨다. ( URL 경로 또는 Path경로를 변경하여 처리 하기도한다. )


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var http = require('http'), express = require('express');
 
var app = express();
 
app.use(function(req,res,next){
    console.log("미들웨어 1");  
    
    res.redirect('https://www.nate.com');  //가장 첫번째 명령만 실행 
    res.redirect('https://www.naver.com');
    
    
});
 
 
http.createServer(app).listen(3000,function(){
   console.log('서버 기동'); 
});
cs


redirect를 사용할 시 가장 첫번째 redirect()함수를 실행하면 

그 밑 동작은 이뤄지지 않는다. 궁금하면 

console.log()를 찍어서 나오는지 확인 해보자.





Comments