https://github.com/mokiebetts/node_spa_mall.git
개인 과제 주소이다.
개인과제에서 나는 이번에 TRY.CATCH을 이용해서 에러를 잡을 수 있는 라우터를 구성해 작성해 봤다.
우선, 물건을 만드는 post 메소드 부터 보겠다.
router.post('/product', async(req, res) => {
try {
const products = {};
const { productName, description, authorName, password } = req.body;
const status = 'FOR_SALE';
if (!product.leanth) {
return status.replace('SOLD_OUT')
};
const product = new Product({
productName,
description,
authorName,
status,
password
});
await product.save();
res.status(200).json({ message: '상품이 성공적으로 작성되었습니다.' });
} catch (error) {
console.error(error);
res.status(400).json({ error: '상품 작성에 실패하였습니다.' });
}
});
위와 같이 동기문을 사용했고 products를 빈 객체로 정의한 후,
req의 바디값을 json으로 받아온다는 생각으로 req에서 온 NAME,묘사, 작성자, 비밀번호를 가져왔고 우선 STATUS의 디펄트 값이 FOR SALE로 정의 해주었다.
그리고 이프문을 적어서 물건이 없으면 sold out으로 바꾸게 했고(이부분에서는 잘한건지 모르겠다.)
후에 Product에 위에 정의한 항목들을 넣어주었고
저장 후 status 200값을 주고 에러시 400값을 주었다.
router.get("/product", async(req, res) => {
try {
const products = await Product.find().sort({ createdDate: -1 });
const productData = products.map((product) => ({
productName: product.productName,
authorName: product.authorName,
status: product.status,
createdDate: product.createdDate,
}));
res.status(200).json(productData);
} catch (error) {
console.error(error);
res.status(400).json({ error: '상품 조회에 실패하였습니다.' });
}
});
이런식으로 get 메소드로 product주소에서 상품을 조회할 수 있게 만들었고
router.get("/product/:id", async(req, res) => {
try {
const product = await Product.findById(req.params.id);
if (product) {
res.status(200).json(product);
} else {
res.status(404).json({ error: '상품을 찾을 수 없습니다.' });
}
} catch (error) {
console.error(error);
res.status(400).json({ error: '상품 조회에 실패하였습니다.' });
}
});
이렇식으로 product/id로 들어가서 상품을 상세 조회할 수 있게 했다.
이런식으로 하면 id에 맞는 스케마 속의 정보들을 모두 볼 수 있지않을까라는 생각으로 적었다.
router.put("/product/:id", async(req, res) => {
try {
const { productName, description, status, password } = req.body;
const product = await Product.findById(req.params.id);
if (!product) {
return res.status(404).json({ error: '상품을 찾을 수 없습니다.' });
}
if (product.password !== password) {
return res.status(402).json({ error: '비밀번호가 일치하지 않습니다.' });
}
product.productName = new productName;
product.description = new description;
product.status = new status;
await product.save();
res.status(200).json({ success: true });
} catch (error) {
console.error(error);
res.status(400).json({ error: '상품 수정에 실패하였습니다.' });
}
});
이건 수정하는 것인데 id주소에서 패스워드가 같지 않으면 402에러인 비밀번호가 틀린다는 에러가 나오고
그 후에 new name,묘사, 상태를 입력된 값이 세이브 된다.
router.delete("/product/:id", async(req, res) => {
try {
const { password } = req.body;
const product = await Product.findById(req.params.id);
if (!product) {
return res.status(404).json({ error: '상품을 찾을 수 없습니다.' });
}
if (product.password !== password) {
return res.status(402).json({ error: '비밀번호가 일치하지 않습니다.' });
}
await product.remove();
res.json({ result: "success" });
} catch (error) {
console.error(error);
res.status(400).json({ error: '상품 삭제에 실패하였습니다.' });
}
});
딜리트도 이런 식으로 아이디가 같고 비밀번호가 일치할 때에만 성공을 하겠 끔 만들엇고 catch로 전체적인 에러가 나오면 400값을 띄게 했다.
이번 개인 과제에서는 굉장히 배울게 많았던 것같다.
단지 이런 코드를 적는것 부터해서 파일을 연결하고 몽고디비와 연결하고 aws에 연결하는 방법 까지 그래도 순조롭게 배웠던 것같다.
재미도 있었고
내가 작동했을 때는 잘 작동했던것 같은데 한편으로는 피드백을 빨리 받아서
무엇이 잘못되었는지 확인하고싶다.