api 추가

강현구·2022년 1월 13일
0

Node.js

목록 보기
13/19

api를 추가해 보자.
일단 루트를 하나 만든다.
index.js파일에

const productsRouter = require("./routers/products");
app.use("/api", [productsRouter]);

이렇게 루트를 하나 추가한다.
routers 폴더안에 products가 있어야 하니 만들어 준다.
폴더안에 routers폴더를 하나 만들고 그안에 products.js를 만들어 준다.

전체 파일은 이렇게 되면 된다.
그리고 products.js 안에 코드를 입력 해 준다.

const express = require("express");
const Products = require("../schemas/products");

const router = express.Router();

router.get("/products", async (req, res, next) => {
  try {
    const { tag } = req.query;
    const products = await Products.find({ tag }).sort("-productId");
    res.json({ products: products });
  } catch (err) {
    console.error(err);
    next(err);
  }
});

router.get("/products/:productId", async (req, res) => {
  const { productId } = req.params;
  products = await Products.findOne({ productId: productId });
  res.json({ detail: products });
});

module.exports = router;

일단 이렇게 입력 해 준다.
맨 첫줄은 라우터에 필요한 사항이니 넘어가고 두번째 줄은 schemas폴더안에 products파일을 가져와서 Products라는 이름에 저장하는 것이다.
그리고 그 밑에 라우터는 필요한 설정이니 해준다.
그리고 /products 에 들어가면 실행되는 것들이다.
쿼리로 태그를 가져오고 밑줄에서 그 태그를 찾는다. 그리고 productId를 가지고 정렬을 한다.
그 찾은 값들을 json 방식으로 나타내게 하고 에러가 나면 콘솔에 에러메세지를 띄운다.
그 밑은 태그가 아니고 productId로 물품을 찾는 것이다.
이렇게 작성이 되었으면 이제 서버를 실행해서 /api/products 로 들어가보자.
하나도 안뜬다. 문제 해결을 위해 중간에 if문을 써주었다.

const express = require("express");
const Products = require("../schemas/products");

const router = express.Router();

router.get("/products", async (req, res, next) => {
  try {
    const { tag } = req.query;
    if (tag != undefined) {
      const products = await Products.find({ tag }).sort("-productId");
      res.json({ products: products });
    }
    else {
      const products = await Products.find().sort("-productId");
      res.json({ products: products });
    }
  } catch (err) {
    console.error(err);
    next(err);
  }
});

router.get("/products/:productId", async (req, res) => {
  const { productId } = req.params;
  products = await Products.findOne({ productId: productId });
  res.json({ detail: products });
});

module.exports = router;

중간에 if문 하나가 추가된걸 확인 할 수 있다.
만약 태그가 undefined가 아니면 그 태그를 찾아서 보여주는거고, 태그가 undefined면 모든 품목을 보여주게 만들어 주었다.
그러면 내가 전에 저장한 데이터베이스의 상품 전체가 텍스트로 나오게 된다.
이렇게 마무리 하고 다음은 상품을 추가하는 api를 만들어 보겠다.

추가)

중간에 상품이 다 안뜬것을 if 문으로 임시 해결 했지만, 이게 버전이 달라지면서 schemas/index.js 에 코드 한줄 추가하면 해결이 되는 거였다.

const mongoose = require("mongoose");

const connect = () => {
  mongoose
    .connect("mongodb://localhost:27017/voyage", {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      ignoreUndefined:true
    })
    .catch(err => console.log(err));
};

mongoose.connection.on("error", err => {
  console.error("몽고디비 연결 에러", err);
});

module.exports = connect;

이렇게 중간에 ignoreUndefined:true 를 추가해주면 if문을 쓰지 않아도 잘 뜨게 된다.

profile
초보개발자

0개의 댓글