앞선 아티클에서 여러가지 파일 코드를 작성했습니다. 특히 핵심인 [restServer.js]의 일부를 작성했는데요, 그 나머지 부분을 작성해 보겠습니다.
[restServer.js]
const http = require('http');
const fs = require('fs').promises;
const path = require('path');
// 유저 데이터 저장용
const users = {};
http.createServer(async (req, res) => {
try {
console.log(req.method, req.url);
if (req.method === 'GET') {
if (req.url === '/') {
const data = await fs.readFile(path.join(__dirname, '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(path.join(__dirname, 'about.html'));
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
return res.end(data);
} else if (req.url === '/users') {
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
return res.end(JSON.stringify(users));
}
// 주소가 /도, /about도 아닐 경우
try {
const data = await fs.readFile(path.join(__dirname, req.url));
return res.end(data);
} catch (err) {
// 주소에 해당하는 라우트 찾기 불가로 404 not found error 발생
}
} else if (req.method === 'POST') {
if (req.url === '/user') {
let body ='';
// 요청의 body를 stream 형식으로 받는다
req.on('data', (data) => {
body += data;
});
// 요청의 body를 다 받은 후 실행됨
return req.on('end', () => {
console.log('POST 본문(Body):', body);
const { name } = JSON.parse(body);
const id = Date.now();
users[id] = name;
res.writeHead(201, { 'Content-Type': 'text/plain; charset=utf-8'});
res.end('등록 성공');
});
}
} else if (req.method === 'PUT') {
if (req.url.startsWith('/user/')) {
const key = req.url.split('/')[2];
let body = '';
req.on('data', (data) => {
body += data;
});
return req.on('end', () => {
console.log('PUT 본문(Body):', body);
user[key] = JSON.parse(body).name;
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8'});
return res.end(JSON.stringify(users));
});
}
} else if (req.method === 'DELETE') {
if (req.url.startsWith('/user/')) {
const key = req.url.split('/')[2];
delete users[key];
res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8'} );
return res.end(JSON.stringify(users));
}
}
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(8082, () => {
console.log('8082번 포트 대기 중');
});
이제 터미널에서 node restServer.js를 실행한 다음, http://localhost:8082를 실행해 보겠습니다.
이제 해당 코드와 동작에 대한 자세한 설명은 다음 아티클에서 살펴보겠습니다.
'Programming > Node.js' 카테고리의 다른 글
5. http 모듈로 서버 만들기 (2) - REST와 라우팅 [8] (0) | 2024.07.15 |
---|---|
5. http 모듈로 서버 만들기 (2) - REST와 라우팅 [7] (0) | 2024.07.09 |
5. http 모듈로 서버 만들기 (2) - REST와 라우팅 [5] (0) | 2024.07.08 |
5. http 모듈로 서버 만들기 (2) - REST와 라우팅 [4] (0) | 2024.07.06 |
5. http 모듈로 서버 만들기 (2) - REST와 라우팅 [3] (0) | 2024.07.05 |