Node.js
[Node.js] Request 처리하기
맑은 눈의 우사미
2023. 9. 20. 04:33
반응형
1. node.js
const http = require('http');
const routes = require('./routes.js');
const server = http.createServer(routes.handler);
// console.log(`text : ${routes.someText}`);
server.listen(3000, () => {
console.log("Server is listening on port 3000");
});
이 페이지에서는 서버를 실행하고 routes.js라는 모듈을 import해서 requestHandler로 사용한다.
createServer에는 인자가 req,res가 들어가는데
req : client에서 들어온 요청
res : client로 보낼 응답
이렇게 보면 된다.
server.listen에서는 서버로 사용할 port를 설정하는데 두번째 인자 함수는 생략 가능하다.
2. routes.js
const fs = require('fs');
const requestHandler = (req, res) =>{
const url = req.url;
const method = req.method;
if (url === '/') {
res.write('<html>');
res.write('<head><title>Enter Message</title><head>');
res.write(
'<body><form action="/message" method="POST"><input type="text" name="message"><button type="submit">Send</button></form></body>'
);
res.write('</html>');
return res.end();
}
if (url === '/message' && method === 'POST') {
const body = [];
req.on('data', chunk => {
console.log(`chunk : ${chunk}`);
body.push(chunk);
});
return req.on('end', () => { // 'end' 이벤트는 HTTP 요청의 데이터 스트림이 끝났을 때, 즉 모든 데이터가 서버에 도달했을 때 발생
const parsedBody = Buffer.concat(body).toString(); // 모든 데이터 청크를 결합하여 문자열로 변환
// parsedBody는 [userInput='유저입력값'] <- 문자열이 됨
const msg = parsedBody.split('=')[1]; // 문자열에서 사용자가 입력한 메시지를 추출 (userInput='dfsfds' => dfsfds)
fs.writeFile('message.txt', msg, err => {// 추출한 메시지를 'message.txt' 파일에 작성
//아래는 '/'로 리다이렉션을 처리하는 코드
res.statusCode = 302;
res.setHeader('Location', '/');
return res.end();
});
});
}
res.setHeader('Content-Type', 'text/html');
res.write('<html>');
res.write('<head><title>My First Page</title><head>');
res.write('<body><h1>Hello from my Node.js Server!</h1></body>');
res.write('</html>');
res.end();
}
exports.handler = requestHandler;
exports.someText = 'Some Text Haha';
// module.exports.handler = requestHandler;
// module.exports.someText = 'Some Text Haha';
// 위 코드와 동일
// module.exports = {
// handler : requestHandler,
// someText : 'Some Text Haha'
// }
주석에 자세히 설명해놓았음.
여기에서는 post로 받은 데이터를 어떻게 가져오는지, client로 어떻게 response를 보내주는지 작성되어있다.
중요한건 응답을 보내려면 res.end()를 호출해야한다.
그리고 모듈로 사용하려면 꼭 exports를 해주어야한다.
반응형