ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js] 라우터 요청 : url 루트의 요청에 따라 기능이 달라지는 간단한 서버
    Node.js 2023. 12. 1. 14:38

    1. 라우터 기본 구조 만들기

    const http = require("http");
    
    const server = http.createServer((req, res) => {
      const url = req.url; // url 값을 변수에 저장
    
      if (url === "/") {  // 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();
      }
    
      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();
    });
    
    server.listen(3000);

     

    현재 서버 : localhost:3000

     

    req.url 메서드를 통해 서버에 어떤 url을 요청하는지 파악한다.

    현재 코드는 '/'이 url이 되면,

    즉 기본 루트로 서버에 접근하면

     

    간단한 입력 폼이 나타나게 되어 있다.

     

    2. 요청 리디렉션

    const http = require("http");
    const fs = require("fs");
    
    const server = http.createServer((req, res) => {
      const url = req.url; // url 값을 변수에 저장
      const method = req.method; // 요청의 방법 저장
    
      if (url === "/") {
        // 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") {
        fs.writeFileSync("message.txt", "DUMMY");
        //res.writeHead(302, {}); //302 경로재지정을 의미
        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();
    });
    
    server.listen(3000);

     

    파일 시스템 활용을 위해 fs 모듈을 불러왔다.

    버튼을 클릭하면 message 페이지로 이동하고

    message 페이지에서는 현재 app과 같은 경로에 txt 파일을 만든다.

    그리고 / 페이지로 리디렉션.

     

    3. 요청을 버퍼로 받아 처리하기

    const http = require("http");
    const fs = require("fs");
    
    const server = http.createServer((req, res) => {
      const url = req.url; // url 값을 변수에 저장
      const method = req.method; // 요청의 방법 저장
    
      if (url === "/") {
        // 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);
          body.push(chunk);
        });
        req.on("end", () => {
          const parsedBody = Buffer.concat(body).toString();
          // console.log(parsedBody);
          const message = parsedBody.split('='[1]);
          fs.writeFileSync("message.txt", message);
        });
        //res.writeHead(302, {}); //302 경로재지정을 의미
        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();
    });
    
    server.listen(3000);

     

    * 다음에 버퍼, 청크 등 노드가 데이터를 송수신하는 방식에 대해 조금 더 자세히 알아보겠다.

     

    여기서는 버퍼를 통해 데이터를 받아와

    message 파일에 저장했다.

     

Designed by Tistory.