[4장] 서버 만들기 (REST & Routing)
2022. 5. 3. 00:00ㆍ책/Node.js 교과서
2. REST와 라우팅
2.1 REST / REST API / RESTful
- REST ; REpresentational State Transfer. : 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 말한다. 여기서 자원이란 서버가 행할 수 있는 모든 것들을 통틀어서 의미한다고 보면 된다(파일을 포함한 모든 것들)
- REST API : REST 규칙(총 6가지)을 지켜서 서비스 API를 구현하는 것을 REST API라고 하는데, 사실 저걸 다 지키기는게 쉬운 일은 아니다.
- RESTful : REST를 준수하는 서비스를 RESTful 하다고 한다.
2.2 서버 만들기
HTTP Method(GET, POST, PUT, PATCH, DELETE)를 끼얹어서 RESTful한 서버를 만들어보자. 코드만 주구장창 써내려가면서 중요한 부분만 언급하겠음.
더보기
const http = require('http');
const fs = require('fs/promises');
const users = {};
const server = http.createServer(async (req, res) => {
try {
console.log(req.method, req.url);
switch (req.method) {
case 'GET' :
// GET 요청이 들어오면 경로에 맞는 html파일을 보내준다
if (req.url === '/') {
const data = await fs.readFile('./restFront.html');
res.writeHead(200, { 'Context-Type': 'text/html; charset=utf-8' });
return res.end(data);
} else if (req.url === '/about') {
const data = await fs.readFile('./about.html');
res.writeHead(200, { 'Context-Type': 'text/html; charset=utf-8' });
return res.end(data);
} else if (req.url === '/users') {
res.writeHead(200, { 'Content-Type': 'text-plain; charset=utf-8' });
return res.end(JSON.stringify(users));
}
// 근데 html에 딸린 js랑 css파일도 보내줘야됨
// 그 부분을 여기서 처리하는거임
// req.url에 ~~~.css ~~~.js도 같이 들어옴
try {
const data = await fs.readFile(`.${req.url}`);
return res.end(data);
} catch (err) {
}
case 'POST' :
if (req.url === '/user') {
let body = '';
// 클라이언트로 부터 받는 정보는 stream 형식으로 돼있음
// 따라서 stream 형식으로 받아서 정리
req.on('data', chunk => (body += chunk) );
req.on('end', () => {
console.log('POST 본문(body):',body);
const { name } = JSON.parse(body);
const id = Date.now();
users[id] = name;
res.writeHead(201);
res.end('등록성공');
});
return
}
case 'PUT':
if (req.url.startsWith('/user/')) {
const key = req.url.split('/')[2];
let body = '';
req.on('data', chunk => (body += chunk) );
return req.on('end', () => {
console.log('PUT 본문(Body):', body);
users[key] = JSON.parse(body).name;
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
return res.end('ok');
});
};
case 'DELETE':
if (req.url.startsWith('/user/')) {
const key = req.url.split('/')[2];
delete users[key];
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
return res.end('ok');
}
default:
res.writeHead(404);
return res.end('NOT FOUND');
}
} catch (err) {
console.error(err);
res.writeHead(500, { 'Contet-Type': 'text/plain; charset=utf-8' });
res.end(err.message);
}
});
server.listen(8082);
server.on('listening', () => console.log('8082번 포트 서버 대기중'));
'책 > Node.js 교과서' 카테고리의 다른 글
[4장] 서버 만들기 (cluster) (0) | 2022.05.03 |
---|---|
[4장] 서버 만들기(쿠키와 세션) (0) | 2022.05.03 |
[4장] 서버 만들기 (http모듈) (0) | 2022.05.01 |
[3장] 노드 기능(2) (0) | 2022.04.29 |
[3장] 노드 기능(1) (0) | 2022.04.26 |