웹 브라우저 특성상 GET 요청만 가능하기 때문에 GET이 아닌 POST, DELETE, PUT과 같은 요청을 테스트 하기에는 어려움이 많다. 이러한 문제점을 postman이 해결해준다!
const http = require("http");
http
.createServer((req, res) => {
let { url, method, headers } = req;
let body = {};
console.log(url, method, headers);
req
// data 이벤트에 콜백함수 등록
.on("data", (data) => {
console.log(data);
console.log(data.toString());
data
.toString()
.split("&")
.map((item) => {
let s = item.split("=");
let key = s[0];
let value = s[1];
body[key] = value;
});
})
// end 이벤트에 콜백함수 등록
.on("end", () => {
console.log(body);
});
res.writeHead(200);
res.end("Hello World!");
})
.listen(3000, () => {
console.log("Server on : 3000 port");
});
.on()
은 emitter에 이벤트를 등록할 수 있는 함수다. 여기서 emitter는 request, response, server 등등을 의미한다.
| 참고
listen()
은 특정 포트를 여는 server의 함수이다.
먼저 postman을 이용하여 서버에 데이터를 send 했다.
(x-www-form-urlencoded를 체크한 뒤 send하면 좀 더 데이터를 다루기 쉽다.)
| 출력화면
여기서 Buffer의 괄호 안에 있는 숫자들은 데이터이다.
toString()
메소드를 사용하여 요청 객체에 들어온 data를 문자열로 변환한다.split()
메소드를 사용하여 "&"을 기준으로 문자열을 자른다.map()
메소드를 사용하여 'a=1' 'b=2' 'c=3'이 차례대로 map의 item으로 들어가 "="을 기준으로 문자열을 자르고 s로 정의한다.// 서버 생성
const http = require("http");
http
.createServer((req, res) => {
const { url, method, headers } = req;
console.log(url, method, headers);
if (method === "GET") {
if (url === "/users") {
res.writeHead(200);
// 응답 종료 처리
return res.end("/users");
} else if (url === "/boards") {
res.writeHead(200);
return res.end("/boards");
} else if (url === "/cloths") {
res.writeHead(200);
return res.end("/cloths");
}
}
res.writeHead(200);
res.end("Not found page");
})
.listen(3000, () => {
console.log("server on : 3000 port");
});
method가 GET인 경우 url에 따라 보여지는 내용을 각각 다르게 했다.
만약 method가 GET이 아니라면 "Not found page" 라는 문자열을 보게 될 것이다.
| method가 GET이 아닌 경우
| method가 GET이면서 url이 locallhost:3000/users인 경우
| method가 GET이면서 url이 locallhost:3000/boards인 경우
| method가 GET이면서 url이 locallhost:3000/cloths인 경우
// 서버 생성
const http = require("http");
http
.createServer((req, res) => {
const { url, method, headers } = req;
let body = {};
console.log(url, method, headers);
req
// data 이벤트에 콜백함수 등록
.on("data", (data) => {
console.log(data);
console.log(data.toString());
data
.toString()
.split("&")
.map((item) => {
let s = item.split("=");
let key = s[0];
let value = s[1];
body[key] = value;
});
})
// end 이벤트에 콜백함수 등록
.on("end", () => {
// console.log(body);
for (let i = 0; i < 10; i++) {
console.log(i);
}
});
if (method === "POST") {
if (url === "/users") {
res.writeHead(200);
// 응답 종료 처리
return res.end("/users");
} else if (url === "/boards") {
res.writeHead(200);
return res.end("/boards");
} else if (url === "/cloths") {
res.writeHead(200);
return res.end("/cloths");
}
}
// 페이지가 없을 때
res.writeHead(200);
res.end("Not found page");
})
.listen(3000, () => {
console.log("server on : 3000 port");
});
요청 객체(req)에 이벤트를 추가했던 예제와 섞어보았다.
method가 POST로 바뀌었다는 것만 빼면 GET 예제와 요청 객체 예제와 결과는 똑같다.