postman을 이용하여 GET과 POST 예제를 테스트 해보자!

binary·2021년 12월 31일
1

일팔공

목록 보기
15/20
post-thumbnail

postman 이 뭐지?

웹 브라우저 특성상 GET 요청만 가능하기 때문에 GET이 아닌 POST, DELETE, PUT과 같은 요청을 테스트 하기에는 어려움이 많다. 이러한 문제점을 postman이 해결해준다!

postman 설치하기

req 요청 객체에 이벤트 활용

const http = require("http");

http
  .createServer((req, res) => {
    let { url, method, headers } = req;

    let body = {};
    console.log(url, method, headers);

    req
      // data 이벤트에 콜백함수 등록
      .on("data", (data) => {
        console.log(data);
        console.log(data.toString());
        data
          .toString()
          .split("&")
          .map((item) => {
            let s = item.split("=");
            let key = s[0];
            let value = s[1];
            body[key] = value;
          });
      })
      // end 이벤트에 콜백함수 등록
      .on("end", () => {
        console.log(body);
      });
    res.writeHead(200);
    res.end("Hello World!");
  })
  .listen(3000, () => {
    console.log("Server on : 3000 port");
  });

.on() 은 emitter에 이벤트를 등록할 수 있는 함수다. 여기서 emitter는 request, response, server 등등을 의미한다.

| 참고

listen() 은 특정 포트를 여는 server의 함수이다.

data 이벤트를 살펴보자!

먼저 postman을 이용하여 서버에 데이터를 send 했다.
(x-www-form-urlencoded를 체크한 뒤 send하면 좀 더 데이터를 다루기 쉽다.)

| 출력화면


여기서 Buffer의 괄호 안에 있는 숫자들은 데이터이다.

  1. toString() 메소드를 사용하여 요청 객체에 들어온 data를 문자열로 변환한다.
    (결과 | a=1&b=2&c=3)
  2. split() 메소드를 사용하여 "&"을 기준으로 문자열을 자른다.
    (결과 | [ 'a=1', 'b=2', 'c=3' ])
  3. map() 메소드를 사용하여 'a=1' 'b=2' 'c=3'이 차례대로 map의 item으로 들어가 "="을 기준으로 문자열을 자르고 s로 정의한다.
  4. 객체의 key는 s[0] 이 되고, value는 s[1]이 된다.
  5. 빈 객체였던 body에 key와 value를 정의해준다.
    body[key] = value;
    (예. bodyy['a'] = '1'; body['b'] = '2'; body['c'] = '3';)
  6. body를 출력해보면 { a: '1' , b: '2', c: '3' } 이 나온다.

GET method를 활용한 예제

// 서버 생성
const http = require("http");
http
  .createServer((req, res) => {
    const { url, method, headers } = req;
    console.log(url, method, headers);

    if (method === "GET") {
      if (url === "/users") {
        res.writeHead(200);
        // 응답 종료 처리
        return res.end("/users");
      } else if (url === "/boards") {
        res.writeHead(200);
        return res.end("/boards");
      } else if (url === "/cloths") {
        res.writeHead(200);
        return res.end("/cloths");
      }
    }
    res.writeHead(200);
    res.end("Not found page");
  })
  .listen(3000, () => {
    console.log("server on : 3000 port");
  });

method가 GET인 경우 url에 따라 보여지는 내용을 각각 다르게 했다.
만약 method가 GET이 아니라면 "Not found page" 라는 문자열을 보게 될 것이다.

| method가 GET이 아닌 경우

| method가 GET이면서 url이 locallhost:3000/users인 경우

| method가 GET이면서 url이 locallhost:3000/boards인 경우

| method가 GET이면서 url이 locallhost:3000/cloths인 경우

POST method를 활용한 예제

// 서버 생성
const http = require("http");
http
  .createServer((req, res) => {
    const { url, method, headers } = req;
    let body = {};
    console.log(url, method, headers);

    req
      // data 이벤트에 콜백함수 등록
      .on("data", (data) => {
        console.log(data);
        console.log(data.toString());
        data
          .toString()
          .split("&")
          .map((item) => {
            let s = item.split("=");
            let key = s[0];
            let value = s[1];
            body[key] = value;
          });
      })
      // end 이벤트에 콜백함수 등록
      .on("end", () => {
        // console.log(body);
        for (let i = 0; i < 10; i++) {
          console.log(i);
        }
      });

    if (method === "POST") {
      if (url === "/users") {
        res.writeHead(200);
        // 응답 종료 처리
        return res.end("/users");
      } else if (url === "/boards") {
        res.writeHead(200);
        return res.end("/boards");
      } else if (url === "/cloths") {
        res.writeHead(200);
        return res.end("/cloths");
      }
    }

    // 페이지가 없을 때
    res.writeHead(200);
    res.end("Not found page");
  })
  .listen(3000, () => {
    console.log("server on : 3000 port");
  });

요청 객체(req)에 이벤트를 추가했던 예제와 섞어보았다.

method가 POST로 바뀌었다는 것만 빼면 GET 예제와 요청 객체 예제와 결과는 똑같다.

0개의 댓글