NODE.JS
OnlineShop 만들기 - 3)업로드 페이지에 onSubmit 기능 만들기
dodop
2021. 5. 15. 16:32
업로드 페이지에 제출 기능을 만들어서 페이지를 완성하자.
먼저 프로덕트 모델을 만들자.
models>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:[]
},
continents:{
type:Number,//지역설정 key를 기준으로 저장하기 때문에 type 이 number이다.
default:1//key가 1부터 시작하기 때문에 1이 디폴트다
},
sole:{
type:Number,
maxlength:100,//최대 100개까지 팔 수 있다.
default:0//하나도 못팔면 0부터 시작
},
views:{
type:Number,//몇명이 봤는지 저장, 디폴트는 0명
default:0
}
}, {timestamps:true})//시간 저장
const Product = mongoose.model('Product', productSchema);
module.exports = { Product }
이제 onsubmit function을 만들자
uploadproductpage에 가서 함수만든다.
const onSubmit = (event) => {
event.preventDefault();//페이지 다시 새로고침 하는 것 방지
if (!TitleValue || !DescriptionValue || !PriceValue ||//어느하나라도 작성이 되어있지 않으면 보내지 않을 것이다.
!ContinentValue || !Images) {
return alert('fill all the fields first!')
}
const variables = {
writer: props.user.userData._id,//리덕스 스테잇을 보면 어떻게 저장되어 있는지 확인가능하다(로그인정보)
title: TitleValue,
description: DescriptionValue,
price: PriceValue,
images: Images,
continents: ContinentValue,
}
Axios.post('/api/product/uploadProduct', variables)//정보들을 전해준다.(프로덕트 모델에 맞춰서)
.then(response => {
if (response.data.success) {
alert('Product Successfully Uploaded')
props.history.push('/')//성공한다음에 메인 페이지로 이동할 것이다.
} else {
alert('Failed to upload Product')
}
})
}
<Button
onClick={onSubmit}
>
Submit
</Button>
Axios를 날려줬으니 route폴더로 가서 라우트 만든다.
const { Product } = require("../models/Product");//프로덕트 모델을 가지고와서 처리한다.
router.get("/uploadProduct", auth, (req, res) => {
//save all the data we got from the client into the 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})
})
});