인프런 커뮤니티 질문&답변

yoomzzi님의 프로필 이미지

작성한 질문수

비전공자를 위한 진짜 입문 올인원 개발 부트캠프

TypeError: Cannot destructure property 'id' of 'req.params' as it is undefined.

작성

·

3K

1

결제하기 구현 강의에서 

코드를 똑같이 따라했는데 포스트맨에서 실행했을 때  계속 

TypeError: Cannot destructure property 'id' of 'req.params' as it is undefined.

이런 오류가 뜨네요 ㅜ

답변 1

1

그랩님의 프로필 이미지
그랩
지식공유자

서버쪽 전체 소스코드 공유해주실 수 있으실까요~?

yoomzzi님의 프로필 이미지
yoomzzi
질문자

const express = require("express");
const cors = require("cors");
const app = express();
const models = require("./models");
const multer = require("multer");
const upload = multer({
  storage: multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, "uploads/");
    },
    filename: function (req, file, cb) {
      cb(null, file.originalname);
    },
  }),
});
const port = 8080;

app.use(express.json());
app.use(cors());
app.use("/uploads", express.static("uploads"));

app.get("/banners", (req, res) => {
  models.Banner.findAll({
    limit: 2,
  })
    .then((result) => {
      res.send({
        banners: result,
      });
    })
    .catch((error) => {
      console.error(error);
      res.status(500).send("에러가 발생했습니다");
    });
});

app.get("/products", (req, res) => {
  models.Product.findAll({
    order: [["createdAt", "DESC"]],
    attributes: [
      "id",
      "name",
      "price",
      "createdAt",
      "seller",
      "imageUrl",
      "soldout",
    ],
  })
    .then((result) => {
      console.log("PRODUCTS :", result);
      res.send({
        products: result,
      });
    })
    .catch((error) => {
      console.error(error);
      res.status(400).send("에러 발생");
    });
});

app.post("/products", (req, res) => {
  const body = req.body;
  const { name, description, price, seller, imageUrl } = body;
  if (!name || !description || !price || !seller || !imageUrl{
    res.status(400).send("모든 필드를 입력해주세요 ");
  }
  models.Product.create({ description, price, seller, imageUrl, name })
    .then((result) => {
      console.log("상품 생성 결과 :", result);
      res.send({
        result,
      });
    })
    .catch((error) => {
      console.error(error);
      res.status(400).send("상품 업로드에 문제가 발생했습니다");
    });
});

app.get("/products/:id", (req, res) => {
  const params = req.params;
  const { id } = params;
  models.Product.findOne({
    where: {
      id: id,
    },
  })
    .then((result) => {
      console.log("PRODUCT :", result);
      res.send({
        product: result,
      });
    })
    .catch((error) => {
      console.error(error);
      res.status(400).send("상품 조회에 에러가 발생했습니다");
    });
});

app.post("/image", upload.single("image"), (req, res) => {
  const file = req.file;
  console.log(file);
  res.send({
    imageUrl: file.path,
  });
});

app.post("/purchase/:id", (res, req) => {
  const { id } = req.params;
  models.Product.update(
    {
      soldout: 1,
    },
    {
      where: {
        id,
      },
    }
  )
    .then((result) => {
      res.send({
        result: true,
      });
    })
    .catch((error) => {
      console.error(error);
      res.status(500).send("에러가 발생했습니다.");
    });
});

app.listen(port, () => {
  console.log("그랩의 쇼핑몰 서버가 돌아가고 있습니다.");
  models.sequelize
    .sync()
    .then(() => {
      console.log("DB 연결 성공!");
    })
    .catch((err) => {
      console.error(err);
      console.log("DB 연결 에러ㅠ");
      process.exit();
    });
});
yoomzzi님의 프로필 이미지
yoomzzi
질문자

강사님이 올려주신 코드를 복사해서 실행 했을땐 제대로 실행되는데,

제가 작성한 코드가 뭐가 잘못됐는지 도저히 모르겠네요 ㅜ 

그랩님의 프로필 이미지
그랩
지식공유자

app.post("/purchase/:id", (res,req) => { 코드를 보시면  (res, req)로 되어있습니다. 보통 순서는 request가 첫번째로 response가 2번째로 오기 때문에 req, res로 적어주셔야 합니다:)

yoomzzi님의 프로필 이미지
yoomzzi
질문자

답변 감사합니다!

yoomzzi님의 프로필 이미지

작성한 질문수

질문하기