[모르고리즘 5-2] request 대.제.전. 리턴즈

LILO Ghim·2022년 4월 17일
0


썸네일 with kkr & sjh


나에겐 추억이 하나 있지
request와 말이야
리퀘스트 대.제.전. 비긴즈

아 이번엔 뭘 하나 더 달고 왔네 request.on


if(pathname === '/create_process'){
        var body = '';                  
        request.on('data', function(data){ /
            body += data;
        });
        request.on('end', function(){ 
            var post = qs.parse(body);  //qs이라는 모듈의 parse 함수를 이용해서 정보를 전환, 객체화 할 수 있다
            var title = post.title;
            var description = post.description;

            fs.writeFile(`data/${title}`, description, 'utf8', function(err){
                response.writeHead(302, {Location:`/?id=${title}`});
                response.end();
            });
        });
    }

모든 것은 이 코드로부터 시작되었다
정보를 받아서 파일로 저장하겠다

request.on('왜뭐', function(왜뭐) { })

node로 웹 브라우저 접속이 들어올 때마다 createServer의 콜백함수(쩌어기 코드 맨위에 어딘가에 있음)를 node가 호출하는데, 콜백함수 안에는 requestresponse 2가지 인자가 있고,
웹이 post 방식으로 'data'를 전송할 때 그 양이 엄청 많은데, 한 번에 처리하게 되면 컴퓨터가 꺼지겠지?
노드에서 post로 전송되는 데이터가 많을 때를 대비해서 request.on을 제공하는데,
어떤 특정한 양, 100이라는 데이터를 조각조각의 양으로 server에서 수신할 때마다
server는 콜백함수(바디에 데이터 더하기)를 호출하도록 약속되어 있다.
그 콜백을 호출 할 때 'data'라는 인자를 통해서 수신한 정보를 주기로 약속함!

그러니까 'body'에다가 콜백이 실행될 때마다 'data'를 추가해주고 있는데
데이터가 조각조각 들어오다가 더 이상 정보가 없으면 request.on('end', function(){} end 다음의 콜백함수를 호출하고, 'end'에 해당하는 콜백이 실행 됐을 때, 수신이 끝났다고 생각할 수 있다.


'data'와 'end' 이러한 이벤트

를 이용해서 웹 브라우저로부터 'post' 방식으로 전송된 데이터를 가져올 수 있고, qs.parse 즉 qs 모듈의 parse 함수를 통해서 정보를 전환할 수 있는데 이것이 "객체화" 이다.
var post = qs.parse('body') => {"title" : "왜", "desc" : "뭐" }

request.on이 뭔데요? -> 이벤트가 뭔데요? -> 핸들러가 뭔데요?


뭔데요월드에서 탄생한
한국사회 뤈타임과 공부이벤트

// 그리고 메세지와 스트림은 다음에 생각해보기로 //
재밌는거 1
https://0oooceanhigh.medium.com/request-on-f060659cb36e
이상한거 1
https://en.wikipedia.org/wiki/Message
신기한거 1 https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%B2%A4%ED%8A%B8_(%EC%BB%B4%ED%93%A8%ED%8C%85


아니 그래서


저 논란의 코드는 bodyParser의 등장으로 이렇게 변하게 되는데


const bodyParser = require('body-parser')
app.use(bodyParser.json())

app.post('/create_process', function(request, response){ 
  const { body: { title, description } } = request;
  fs.writeFile(`./data/${title}`, description, 'utf8', function(err){
    response.writeHead(302, {Location: `/?id=${title}`});
    response.end();
  });
});

body는 웹 브라우저쪽에서 요청한 본체이고, 그 본체를 설명하는 것이 헤더인데,
그 본체인 데이터를 parser 즉 분석해서 필요한 형태로 가공하는 것.

main.js가 실행 될 때마다, 즉 사용자가 요청할 때마다, 이 코드에 의해서 만들어진 미들웨어가 실행되고,
미들웨어는 내부적으로 사용자가 전송한 post 데이터를 내부적으로 분석해서,
모든 데이터를 가져온 후에 엔드포인트에 해당하는 콜백을 호출하도록 되어 있다는 것.
콜백의 처음 인자인 request에는 body라는 property가 없는데 만들어 줌. 누가? body parser가

즉, body parser라는 미들 웨어가 내부적으로 '/create_process' 라우터를 사용할 때 request 객체의 body property에 접근가능 하게 한다.

profile
킴릴로

0개의 댓글