오늘은 어제 구현했던 server->client를 http의 내장 모듈로 구현을 했다면, 그 구현한 내용을 express 라이브러리를 이용하여 구현하는 시간을 가졌다.
어제와 구성은 비슷했고,
메소드들이 조금 다른데 제공하는 npm문서가 잘 되어있어서 금 방 찾아서 바꿀 수 있었던 것 같다.
if(request.method === 'POST' && request.url === "/classes/messages"){
let save = [];
request.on('data',(chuck)=>{
save.push(chuck);
});
request.on('end',()=>{
save = Buffer.concat(save).toString();
data.results.push(JSON.parse(save));
response.writeHead(201, headers);
response.end(JSON.stringify(data));
});
}
http 모듈을 사용하면서 라우팅을 할 때에는,
(data라는 객체의 key는 results로 value는 빈배열인 상황이다.)
1. 위와 같은 조건을 걸고
2. chuck라는 버퍼 데이터를 받아서 save에 다 push하고
3. (data는 잘게 나누어서 전달되기 때문에(?) 데이터가 송신이 다 끝나면)end에서 버퍼들이 들어있는 배열을 concat한 다음 문자열로 바꾸고
4. JSON으로 파싱한 것을 results에 넣어주고
5. writeHead()메소드로 상태코드와 미리 설정해준 header를 먼저 보내고
6.end()메소드로 파싱된 data를 전송한다...
그러나 express를 사용하면
express, cors, body-parser 설치하고,
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
//생략
app.use(bodyParser.json());
app.use(cors());
app.post('/classes/messages',(req,res)=>{
data.results.push(req.body);
res.status(201).send(JSON.stringify(data));
})
위와 같은 코드로 작동하였다.
똑같은 기능을 하지만, 코드의 가독성이나 편의성 부분에서 확실히 차이가 느껴졌던 부분이다.
자바 스크립트는 단일 쓰레드를 가지고 있음...
console.log("A");
setTimeout(function() {
console.log("B");
}, 1000);
superLongComputation();
setTimeout(function() {
console.log("C");
}, 500);
console.log("D”);
위와 같은 코드는
1. A 콘솔이 찍히고
2. B 는 콜스택에 들어가고 webs API에 들어가고
3. superLongComputation();로 인해 5초 동안 대기하면서(C는 실행도 되지 않은 상태)
4. 드디어 C가 콜스택, webs API에 들어가고, D콘솔이 찍힌다.
5. 이때 webs API에 1초동안 있던 B는 callback queue에서 대기하고 있다가 B가 출력되고 0.5후에 C가 찍힌다.
A-> D-> B-> C
어렵다...
주말에 확실히 해야할 것
이번주 스프린트, TIL 돌아보기, 북마크 보기, 재귀 더 공부하기!