mongoose를 사용하여 mongoDB를 node.js에서 사용하기 3 + Insomnia(서버에 request하는 프로그램) + post ( api 표현 )

하이루·2021년 12월 6일
0
post-custom-banner

mongoDB에 데이터 추가하기 --> 상품을 추가하는 api

--> REST api 에 따르면 새로운 데이터를 추가하는 method는 POST 를 쓰는 것을 권장

POST메소드

--> GET 메소드와는 다르게 body 라는 추가적인 정보를 담아 서버에 전달 할 수 있음


라우팅 정보를 담고 있는 goods.js파일

  const express = require("express");
  const Goods = require("../schemas/Goods");

  const router = express.Router();

  router.get("/goods", async (req, res, next) => {
    try {
      const { category } = req.query;
      const goods = await Goods.find({ category }).sort("-goodsId");
      res.json({ goods: goods });
    } catch (err) {
      console.error(err);
      next(err);
    }
  });

  router.post('/goods', async (req, res) => {
    const { goodsId, name, thumbnailUrl, category, price } = req.body;

    isExist = await Goods.find({ goodsId });
    if (isExist.length == 0) {
      await Goods.create({ goodsId, name, thumbnailUrl, category, price });
    }
    res.send({ result: "success" });
  });

  router.get("/goods/:goodsId", async (req, res) => {
    const { goodsId } = req.params;
    goods = await Goods.findOne({ goodsId: goodsId });
    res.json({ detail: goods });
  });

  module.exports = router;
  
  

이 부분에서 post 메소드 설정 --> 우리가 데이터를 넣기 위한 api

         router.post('/goods', async (req, res) => {
          const { goodsId, name, thumbnailUrl, category, price } = req.body;

          isExist = await Goods.find({ goodsId });
          if (isExist.length == 0) {
            await Goods.create({ goodsId, name, thumbnailUrl, category, price });
          }
          res.send({ result: "success" });
        });
        
       
        

--> body부분에 데이터를 넣어 보내기 때문에 body에서 데이터를 전달 받는다.

--> 이후 전달된 데이터에 id부분을 확인하여 mongoDB에 해당 id의 데이터가 있는지 먼저 확인한 후,
없을 경우에 데이터를 삽입한다.

           --> mongoDB에서 id 부분의 경우 unique설정 되어있을 것이기 때문에
           만약 확인하지 않고 넣는다면 이미 해당 id를 가진 데이터가 있을 때 오류가 발생할 수 있다.
        
        

해당 부분 또한 위의 post api와 같은 path를 가지지만, 이것은 get api로 브라우저를 통해 들어온 요청( request )에 응답( response )하기 위한 코드이다.

--> 브라우저 상에서 해당 path로 api를 호출할 경우 이 코드가 실행된다.

        router.get("/goods", async (req, res, next) => {
        try {
          const { category } = req.query;
          const goods = await Goods.find({ category }).sort("-goodsId");
          res.json({ goods: goods });
        } catch (err) {
          console.error(err);
          next(err);
        }
      });
      
      

일반적인 방법으로 브라우저에서 호출할 경우 post api가 아닌 get api부분이 호출된다.
따라서 post와 같은 메소드를 호출하기 위해서는 다른 방법을 취해야하는데, 그 중 하나가 insomnia라는 프로그램이다.

Insomnia

--> post. put 등의 형식의 api에 request하기 위한 프로그램

insomia 다운 : https://insomnia.rest/download/]

Insomnia사용

--> Create로 내 명령 목록 만들기
(Request Collection)

New Request를 통해 새로운 Request를 만들 수 있음

어떤 메소드의 api로 request할 지 선택 가능

post와 같이 데이터를 보내는 메소드인 경우, 어떤 형식으로 데이터를 전달할지 선택 가능( body 부분 선택 )

post api에 request 할 것이며, 데이터는 JSON형식으로 보낼 것이므로 post,json으로 선택 후 create하면 이렇게 만들어진다.

보낼 주소(http://도메인/path)를 설정한 후, 보낼 데이터를 설정, 이후 Send버튼을 클릭하면 request가 진행된다.

이후 해당 request에 대한 response도 볼 수 있다.

profile
ㅎㅎ
post-custom-banner

0개의 댓글