본문으로 바로가기

[node] 익스프레스 없이 http 요청하기

category IT/node.js 2024. 7. 23. 14:13
반응형

HTTP 요청에서 데이터를 받는  방법

const http = require("http"); // 모듈 불러오기

//서버 생성
const server = http.createServer((req, res) => {
  console.log("INCOMING REQUEST");
  console.log(req.method, req.url);
	
  // post 요청 처리
  if (req.method === "POST") {
    let body = "";
    
    // 데이터가 모두 수신된 후 처리  ++ body에 추가.
    req.on("end", () => {
      // 클라이언트로부터 모든 data를 수신하면 실행한다.
      const userName = body.split("=")[1];
      res.end("<h1>" + userName + "</h1>");
    });
    
    // body.split("=")는 body를 = 문자로 나눕니다. 예를 들어, body가 "username=John"이라면, 
    // split 결과는 ["username", "John"]가 됩니다.
    // [1]은 리스트의 두 번째 요소를 선택합니다. 즉, "John"을 반환합니다.

    // 이 코드는 폼 데이터를 username 파라미터로 받아서 그 값을 HTML 응답으로 반환합니다. 
    // 만약 body가 빈 문자열이거나 올바른 형식이 아니라면 split("=")[1]는 오류를 발생시킬 수 있습니다. 
    // 이를 방지하기 위해서는 추가적인 유효성 검사가 필요합니다.
    //const userName = body.split("=")[1] || "Unknown";

    // 데이터 수신중
    req.on("data", (chunk) => {
      body += chunk;
    });
    // req.on("data", (data) => (body += data));
    // data(chunk data)가 들어올 때마다 body에 chunk data를 넣는다.
    
   // get 요청처리
  } else {
    res.setHeader("Content-Type", "text/html");
    res.end(
      '<form method="POST"><input type="text" name="username"><button type="submit">Create User</button></form>'
    );
  }
});
// 서버 포트 5001에서 대기
server.listen(5001);

이 코드는 간단한 HTTP 서버를 설정합니다. 서버는 두 가지 유형의 요청을 처리합니다: POST와 GET.

  • GET 요청: 서버는 HTML 폼을 반환합니다. 사용자가 폼을 제출하면 POST 요청이 전송됩니다.
  • POST 요청: 서버는 요청 본문을 수신하고, 그 데이터를 처리합니다.

 

request.on의 이벤트

1. data : 데이터를 수신할 때 실행할 이벤트

2. end : 클라이언트로부터 모든 데이터를 수신 완료했을 때 실행할 이벤트

3. error : 요청 처리 중 에러가 발생했을 때의 이벤트

 

express 를 이용해서 요청하기

// 모듈가져오기
const express = require('express');
const bodyParser = require('body-parser');

// 익스프레스 앱 생성
const app = express();

// bodyParser 미들웨어 설정
app.use(bodyParser.urlencoded({ extended: false }));
//URL 인코딩된 데이터를 해석합니다. 이 미들웨어는 HTML 폼 데이터를 파싱하는 데 사용됩니다.

// POST 요청 처리
app.post('/user', (req, res, next) => {
  res.send('<h1>User: ' + req.body.username + '</h1>');
});
   // user 경로에 대한 POST 요청을 처리합니다.
   // 사용자가 폼을 제출하면, req.body.username에 접근하여 사용자 이름을 가져옵니다.
   // 가져온 사용자 이름을 <h1> 태그로 감싸서 응답으로 보냅니다. 

// GET 요청 처리:
app.get('/', (req, res, next) => {
  res.send(
    '<form action="/user" method="POST"><input type="text" name="username"><button type="submit">Create User</button></form>'
  );
});
//  경로에 대한 GET 요청을 처리합니다.
//  사용자에게 HTML 폼을 반환합니다. 사용자는 이 폼을 통해 사용자 이름을 입력하고 제출할 수 있습니다.

app.listen(5000);
반응형