[Node/React] 쇼핑몰 사이트 만들기 - 04 모든 상품 정보를 DB에 저장하기

JS·2023년 2월 22일
0

4-1. Product Model 만들기

Product Model을 만드는 이유: 모든 정보들을 갖고 있다가
확인버튼을 누를 시 server에 보내서 DB에 저장 해야하는데
몽고DB에 colletion이 필요하기 때문에 만든다.

/product.js

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const productSchema = mongoose.Schema(
  {
    writer: {
      type: Schema.Types.ObjectId,
      ref: "User",
    },
    title: {
      type: String,
      maxlength: 50,
    },
    description: {
      type: String,
    },
    price: {
      type: Number,
      default: 0,
    },
    images: {
      type: Array,
      default: [],
    },
    sold: {
      type: Number,
      maxlength: 100,
      default: 0,
    },

    continents: {
      type: Number,
      default: 1,
    },

    views: {
      type: Number,
      default: 0,
    },
  },
  { timestamps: true }
); // 자동적으로 업데이트 등록

productSchema.index(
  {
    title: "text",
    description: "text",
  },
  {
    weights: {
      title: 5,
      description: 1,
    },
  }
);

const Product = mongoose.model("Product", productSchema);

module.exports = { Product };

4-2. ~ 4-3. Upload File Component 가져오기, 파일 데이터를 uploadFile 컴포넌트에서 부모 컴포넌트로 업데이트 하기

/uploadProductPage.js

  <FileUpload refreshFunction={updateImages} />

4-4. onSubmit Function 만들기

  const submitHandler = (event) => {
    event.preventDefault();

    if (!Title || !Description || !Price ||
        !Continent || Images.length === 0) {
      return alert(" 모든 값을 넣어주셔야 합니다.");
    }

    //서버에 채운 값들을 request로 보낸다.

    const body = {
      //로그인 된 사람의 ID
      writer: props.user.userData._id,
      title: Title,
      description: Description,
      price: Price,
      images: Images,
      continents: Continent,
    };

    Axios.post("/api/product",
      	body).then((response) => {
      if (response.data.success) {
        alert("상품 업로드에 성공 했습니다.");
        props.history.push("/");
        //상품 업로드시 랜딩페이지로 이동하도록 설정
      } else {
        alert("상품 업로드에 실패 했습니다.");
      }
    });
  };
router.post("/", (req, res) => {
  //받아온 정보들을 DB에 넣어 준다.
  const product = new Product(req.body);

  product.save((err) => {
    if (err) return res.status(400).json({ 
      success: false, err });
    
    return res.status(200).json({ 
      success: true });
  });
});
profile
신입 FE 개발자

0개의 댓글