본문 바로가기
Nodejs

[Nodejs]http 모듈 활용해 post 요청 보내고 응답 받기

by teamnova 2024. 12. 29.
728x90

오늘은 http 모듈을 활용해 post 요청을 보내고 응답을 받는 예시를 만들어 보겠습니다.

 

jsonplaceholder 사이트( http://jsonplaceholder.typicode.com )로

{"title":"foo","body":"bar","userId":1} json 문자열을 바디에 넣어 post 요청을 보내겠습니다.

 

http모듈은 http 웹 서버 구축 및 클라이언트 기능을 제공하는 모듈입니다.

 

 

1.프로젝트 생성 및 초기

mkdir 생성할 폴더명
cd 방금 생성한 폴더명
npm init -y

=> 원하는 경로에 폴더를 생성하고 해당 폴더로 이동 후 프로젝트 생성 및 초기화 시켜줍니다.

 

 

 

2.http모듈 활용할 js파일 생성

touch js 파일명

 

 

 

저는 위 이미지와 같이 생성하였습니다.

 

 

 

 

3.http 모듈 활용할 js파일 코드 작성

//http 모듈 import
const http = require('node:http');

// 요청 시 바디에 넣을 JSON 문자열 생성
const postData = JSON.stringify({
    title: 'foo',
    body: 'bar',
    userId: 1,
});


//요청시 필요한 정보 설정
const options = {
    hostname: 'jsonplaceholder.typicode.com', // 요청을 보낼 호스트명
    port: 80,                    // 포트 번호 (HTTP 기본값은 80)
    path: '/posts',                   // 요청할 경로
    method: 'POST',               // HTTP 메서드
    headers: {
        'Content-Type': 'application/json; charset=UTF-8',
        'Content-Length': Buffer.byteLength(postData), // 데이터 길이 설정
    },
};

// 요청 작업용 객체 생성 및 응답 받을시 처리 방식 설정
//http.request() 함수를 활용해 http.ClientRequest(요청에 대한 헤더 및 콜백 등 요청에 대한 설정 역할) 객체를 생성
const req = http.request(options, (res) => {
    console.log(`상태 코드: ${res.statusCode}`);
    console.log(`헤더: ${JSON.stringify(res.headers)}`);

    res.setEncoding('utf8'); // 응답 데이터를 utf8 문자열로 처리

    let responseData = '';

    //응답 받을시 응답 내용 변수에 데이터 추가
    //data: 스트림에서 데이터 조각 덩어리(chunk)를 넘겨 받을때마다 발생하는 이벤트
    res.on('data', (chunk) => {
        responseData += chunk;
    });

    //응답 수신 다 끝났을 경우 이벤트 실행
    //end: 스트림에서 더 이상 소비할 데이터가 없을때 발생하는 이벤트
    //     즉, 스트림에서 더 이상 받을 데이터가 없는 수신 완료시 발생하는 이벤트
    res.on('end', () => {
        console.log(`응답 본문: ${responseData}`);
    });
});

//데이터를 쓰는 도중 오류 발생시 호출되는 이벤트
// 즉 요청 중 에러 발생시 호출되는 메서드
req.on('error', (e) => {
    console.error(`요청 에러: ${e.message}`);
});

//설정한 request 객체 정보대로 request 정보를 전송 그리고 다 보낸 후 서버로 요청 전송 완료됨을 알림
//즉 요청 관련 헤더 및 데이터들 전송 그리고 스트림에 남은 데이터 flush 하고 0\r\n\r\n를 보내서 전송 데이터가 끝남을 서버로 알림
req.end(postData);



 

 

실행 결과

 

post 요청 및 응답이 성공적으로 수행되었음을 확인할 수 있습니다.