본문 바로가기
Elice SW 2/TIL

DAY 30 - TIL

by 자이구 2022. 5. 16.

http 모듈

  • 비동기 이벤트 기반 JS 런타임 인 Node.js는 확장 가능한 네트워크 어플리케이션을 빌드하도록 설계
  • Http는 TCP/IP를 기반으로 하는 프로토콜
  • Node.js에는 HTTP  내장 모듈이 있어 Node.js가 HTTP를 통해 테이터를 전송할 수 있음
var http = require("http");
var fs = require("fs");
var querystring = require("querystring");
const port = 8080;

var server = http
  .createServer(function (req, res) {
    if (req.method == "GET") {
      fs.readFile("./index.html", "utf8", function (error, data) {
        res.writeHead(200, { "Content-Type": "text/html" });
        res.end(data);
      });
    }
    //1.요청 방식이 POST일 경우에 index.html 파일을 웹에 띄워주세요. (true를 수정하세요.)
    else if (req.method == "POST") {
      req.on("data", function (chunk) {
        console.log(chunk.toString());
        //2. form에서 받은 데이터를 .parse()와 toString()을 사용해서 객체로 반환하세요. (null을 대체하세요.)
        var data = querystring.parse(chunk.toString());
        res.writeHead(200, { "Content-Type": "text/html" });
        //3. res.end()를 사용해서 login 페이지에 data.id, data.pw를 출력하세요.
         res.end(data.id + data.pw);
      });
    }
  })
  .listen(port, function () {
    console.log("Server is running...");
  });
//모듈을 추출합니다.
var http = require('http');

//server 객체를 생성합니다.
var server = http.createServer();

//server 객체에 이벤트를 연결합니다.
server.on('request', function(){
	console.log('Request On');
});
server.on('connection', function(){
	console.log('Connection On');
});
server.on('close', function(){
	console.log('Close On');
});

//listen() 메서드를 실행합니다.
server.listen(1016);

 

Http 메소드가 POST인 경우에는, 요청 Body를 통해 데이터가 전달

이 요청 Body를 받기 위한 http.createServer의 문법은 다음과 같음

req.on('data', function(chunk){
	console.log(chunk) 
	//<Buffer 69 64 3d 61 62 63 26 70 77 3d 31 32 33 26 73 75 62 6d 69 74 3d 25 45 43 25 41 30 25 39 43 25 45 43 25 42 36 25 39 43>
    
    	console.log(chunk.toString())
		//id=abc&pw=123&submit=%EC%A0%9C%EC%B6%9C
    
    	console.log(querystring.parse(chunk.toString()))
		//[Object: null prototype] { id: 'abc', pw: '123', submit: '제출' }
})
  • 위 코드의 의미는,req(request, 즉 요청)에서 data로 분류되는 것을 가져온 후 함수를 실행한다는 뜻
  • 이 때 http.createServer 문법에서 POST로 온 BODY 데이터는 data라는 용어로 분류
  • chunk를 보면, 이 또한 http.createServer의 문법인데, 데이터 원본이라고 생각하시면 됨
  • 이 자체로는 의미가 없으며(사람이 읽을 수 없는 데이터 원본 상태
  • toString()함수로 한 번 변환
  • 그리고, 이를 객체 형태({ } 모양)로 만들어 주려면, querystring.parse 함수로 또 한 번 변환

 

 

 

Request  Properties

 

req.params

  • /user/:name 경로가 있으면 "name"속성을 req.params.name으로 사용할 수 있음
  • https://params/user/1234 일 경우 1234를 받는다. 
  • req.param은 더이상 사용하지 않음

req.query

  • 경로의 각 쿼리 문자열 매개 변수에 대한 속성이 포함 된 개체
  • https://query/search?username=jaeku
  • username 매개변수(parameter)의 jaeku 이라는 값(argument)을 가져온다.

req.body

  • JSON 등의 데이터를 담을때 사용(주로 POST로 유저의 정보 또는 파일 업로드를 보냈을 때 )
  • 요청 본문에 제출 된 키-값 데이터 쌍을 포함 
  • 기본적으로 이는 정의되어 있지 않으며 express.json(), express.urlencoded()와 같은 미들웨어를 사용
  • req.body는 body-parser를 사용하기 전에는 default 값으로 Undefined 설정되기 때문에 body-parser를 사용하여 해결해야 오류
  • body-parser : 요청의 본문(body)을 지정한 형태로 파싱해주는 미들웨어
  • body-parser를 이용하면 body 부분을 원하는 형태로 파싱이 가능
const bodyParser = require('body-parser');

app.use(bodyParser.json());	//요청 본문을 json 형태로 파싱
app.use(bodyParser.urlencoded({extended: false}));  //

//express 4.16버전 이상 부터는 express에 기본적으로 parser가 탑재되어 있다
app.use(express.json());
app.use(express.urlencoded({extended: false}));

 

 

 

'Elice SW 2 > TIL' 카테고리의 다른 글

DAY 32 - TIL  (0) 2022.05.20
DAY 31 - TIL  (0) 2022.05.19
DAY 29 - TIL  (0) 2022.05.15
DAY 28 - TIL  (0) 2022.05.12
DAY 27 - TIL  (1) 2022.05.12

댓글