과거 프로그래밍 자료들/컴퓨터설정&오류
[React] axios error request failed with status code 500 해결
평부
2022. 5. 20. 20:12
* client의 값을 server로 전송하는 과정에서 생긴 오류
* 참고한 블로그 : (https://velog.io/@kaitlin_k/axios-patch-400-%EC%98%A4%EB%A5%98)
* 오류 원인 : body로 전달할 때 값과 전달받는 값의 형식이 동일해야 했음,
또한 useState의 값을 전달해야하는데 변수값을 전달해서 생긴 오류
수정 전(Client/UploadProductPage)
const Continents = [
{ key: 1, value: "Asia" },
{ key: 2, value: "Africa" },
{ key: 3, value: "North America" },
{ key: 4, value: "South America" },
{ key: 5, value: "Antarctica" },
{ key: 6, value: "Europe" },
{ key: 7, value: "Australia" },
];
function UploadProductPage(props) {
const [Continent, setContinent] = useState(1);
//Fileupload에 있는 것을 새로운 이미지를 받아오도록 함
const updateImages = (newImages) => {
setImages(newImages);
};
const submitHandler = (event) => {
//페이지 자동 리프레시 되는 것 막음
event.preventDefault();
//값을 다 채우면 서버 request로 보낸다
const body = {
continents: Continents, //이 부분이 문제
};
axios.post("/api/product", body).then((response) => {
if (response.data.success) {
alert("상품 업로드에 성공했습니다.");
navigate("/");
} else {
alert("상품 업로드에 실패했습니다.");
}
});
};
return (
<Form onSubmitCapture={submitHandler}>
<select onChange={continentChangeHandler} value={Continent}>
{Continents.map((item) => (
<option key={item.key} value={item.key}>
{item.value}
</option>
))}
</select>
<br />
<br />
<Button onClick={submitHandler}>확인</Button>
</Form>
</div>
</div>
);
}
export default UploadProductPage;
수정 후(Client/UploadProductPage)
const Continents = [
{ key: 1, value: "Asia" },
{ key: 2, value: "Africa" },
{ key: 3, value: "North America" },
{ key: 4, value: "South America" },
{ key: 5, value: "Antarctica" },
{ key: 6, value: "Europe" },
{ key: 7, value: "Australia" },
];
function UploadProductPage(props) {
const [Continent, setContinent] = useState(1);
//Fileupload에 있는 것을 새로운 이미지를 받아오도록 함
const updateImages = (newImages) => {
setImages(newImages);
};
const submitHandler = (event) => {
//페이지 자동 리프레시 되는 것 막음
event.preventDefault();
//값을 다 채우면 서버 request로 보낸다
const body = {
continents: Continent //useState값을 가져옴
};
axios.post("/api/product", body).then((response) => {
if (response.data.success) {
alert("상품 업로드에 성공했습니다.");
navigate("/");
} else {
alert("상품 업로드에 실패했습니다.");
}
});
};
return (
<Form onSubmitCapture={submitHandler}>
<select onChange={continentChangeHandler} value={Continent}>
{Continents.map((item) => (
<option key={item.key} value={item.key}> //key값을 통해 select값 바뀜(Number)
{item.value}
</option>
))}
</select>
<br />
<br />
<Button onClick={submitHandler}>확인</Button>
</Form>
</div>
</div>
);
}
export default UploadProductPage;
* 서버에서 받는 스키마
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const productSchema = mongoose.Schema( {
continents: {
type: Number, //key값으로 제어하기 때문에 Number로 지정
default: 1,
},
//시간 자동 업데이트
}, { timestamps: true }
);
const Product = mongoose.model("Product", productSchema);
module.exports = { Product };