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를 해주어야한다.

 

반응형