서버와 클라이언트
노드로 http 서버 만들기
const http = require('http')
const server = http.createServer((req, res)=>{
res.write('<h1>Hello Node</h1>')
res.write('<p>Hello server</p>')
res.end('<p>Hello JeongSeok</p>')
})
.listen(8080);
server.on('listening', ()=>{
console.log('8080번 포트에서 서버 대기 중.')
})
server.on('error', (error)=>{
console.error(error)
})
localhost와 포트
fs로 HTML 읽어오기
const http = require('http')
const fs = require('fs').promises
const server = http.createServer(async (req, res)=>{
try {
res.writeHead(200,{'Content-Type': 'text/html; charset=utf-8'}) // 브라우저가 html인지 모를때
const data = await fs.readFile('./practice.html')
res.end(data)
} catch (err) {
console.error(err)
res.writeHead(200,{'Content-Type': 'text/plain; charset=utf-8'})
res.end(err.message)
}
})
.listen(8080);
server.on('listening', ()=>{
console.log('8080번 포트에서 서버 대기 중.')
})
server.on('error', (error)=>{
console.error(error)
})
HTTP 요청 메서드
- GET: 서버 자원을 가져오려고 할 때 사용
- POST: 서버에 자원을 새로 등록하고자 할 때 사용
- PUT: 서버의 자원을 요청에 들어있는 자원으로 치환할 때 사용
- PATCH: 서버 자원의 일부만 수정하고자 할 때 사용
- DELETE: 서버의 자원을 삭제하고자 할 때 사용
GET 요청에 대한 응답
if(req.method === 'GET') {
// 페이지 url 요청 html 파일 응답하기
if (req.url === '/') {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
const data = await fs.readFile('./restFront.html');
return res.end(data)
}
// 목록에 대한 데이터 요청
if (req.url === '/users') {
res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'});
return res.end(JSON.stringify(users));
}
POST 요청에 대한 응답
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('등록 성공');
});
}
PUT 요청에 대한 응답
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);
users[key] = JSON.parse(body).name;
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
return res.end(JSON.stringify(users));
});
}
}
DELETE 요청에 대한 응답
if (req.method === '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(JSON.stringify(users));
}
}