- 요청 : 클라이언트가 서버에게
- 응답 : 클라이언트의 요청을 처리한 후 서버가 클라이언트에게
const http = require("http");
//create a server object:
http.createServer((req, res)=>{});
const http = require("http");
http
.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
res.write("<h1>Hello</h1>");
res.end("<p>server</p>");
})
.listen(8080, () => {
console.log("8080번 포트에서 대기중");
});
코드 해석
브라우저는 응답 내용을 받아서 렌더링함.
- 웹 브라우저(클라이언트) > 요청 > Node.js 서버 내 등록한 콜백(~res.end()까지) > 응답으로 보냄
const http = require("http");
const server = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
res.write("<h1>Hello</h1>");
res.end("<p>server</p>");
});
server.listen(8080);
server.on("listening", () => {
console.log("8080번 포트에서 서버 대기 중");
});
server.on("error", (error) => {
console.error(error);
});
const http = require("http");
const fs = require("fs").promises;
http
.createServer(async (req, res) => {
try {
const data = await fs.readFile("src/server2.html");
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
res.end(data);
} catch (err) {
console.error(err);
res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
res.end(err.message);
}
})
.listen(8080, () => {
console.log("8080에서 대기");
});
* HTTP 상태 코드
- res.writeHead의 첫번째 인수로 상태코드를 넣으면 브라우저는 이걸 토대로 요청이 성공했는지 실패했는지 판단함.
- 2xx : 성공을 알리는 상태코드
* 200: 성공
* 201: 작성됨- 3xx : 리다이렉션(다른 페이지로 이동)을 알리는 상태 코드. 어떤 주소를 입력했는데 다른 주소의 페이지로 넘어갈 때 사용
* 301:영구 이동
* 302:임시 이동
* 304: 수정되지 않은 요청의 응답으로 캐시 사용- 4xx : 요청 오류. 요청 자체에 오류 있는 경우
* 400 : 잘못된 요청
* 401 : 권한 없음
* 403 : 금지됨
* 404 : 찾을 수 없음- 5xx :서버 오류, 예기치 못한 에러 발생 시 서버가 알아서 5XX대 코드를 보냄
* 500 : 서버 내부 오류
* 502 : 불량 게이트웨이
* 503 : 서비스를 사용할 수 없음
1) GET
- 서버 자원 가져오고자 할 때 사용.
- 요청의 본문에 데이터를 넣지 않음
- 데이터를 서버로 보내야 한다면 쿼리스트링 사용
2) POST
- 서버에 자원을 새로 등록하고자 할 때 사용
- 요청의 본문에 새로 등록할 데이터를 넣어 보냄
3) PUT
- 서버의 자원을 요청에 들어 있는 자원으로 치환할 때 사용
- 요청의 본문에 치환할 데이터를 넣어 보냄
4)PATCH
- 서버 자원의 일부만 수정하고자 할 때 사용
- 요청의 본문에 일부 수정할 데이터 넣어 보냄
5)DELETE
- 서버의 자원을 삭제하고자 할 때 사용
- 요청의 본문에 데이터를 넣지 않음
6)OPTIONS
- 요청을 하기 전에 통신 옵션을 설명하기 위해 사용
restServer.js
const http = require("http");
const fs = require("fs").promises;
http
.createServer(async (req, res) => {
try {
console.log(req.method, req.url);
if (req.method === "GET") {
if (req.url === "/") {
const data = await fs.readFile("src/restFront.html");
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
return res.end(data);
} else if (req.url === "/about") {
const data = await fs.readFile("src/about.html");
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
return res.end(data);
}
try {
const data = await fs.readFile(`.${req.url}`);
return res.end(data);
} catch (err) {}
}
res.writeHead(404);
return res.end("NOT FOUND");
} catch (err) {
console.error(err);
res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
res.end(err.message);
}
})
.listen(8080, () => {
console.log("8080에서 대기 중");
});