반응형
Node.js 입문주차로 모듈을 이용해 CRUD 구현 후 배포하는 개인과제를 진행중이다. 그중 CRUD 구현에 대해 작성한 코드를 정리하려한다.
//상품 생성 API
router.post("/products", async (req, res, next) => {
//클라이언트로부터 value 데이터 가져오기
const { name, description, manager, password } = req.body;
const status = "FOR_SALE";
const createdAt = new Date();
const updatedAt = new Date();
//상품 등록
const product = new Product({
name,
description,
manager,
password,
status,
createdAt,
updatedAt,
});
await product.save();
//상품 등록 클라이언트에게 반환
return res.status(201).json({ product });
});
//상품 조회 API
router.get("/products", async (req, res, next) => {
//상품 목록 조회 진행
const products = await Product.find()
.sort("-createdAt")
.select("_id name description manager status createdAt updatedAt")
.exec();
//상품 목록 조회 결과를 클라이언트에게 반환
return res.status(200).json({ products });
});
//상품 상세 조회 API
router.get("/products/:productId", async (req, res, next) => {
const { productId } = req.params;
const findProduct = await Product.findOne({ _id: productId })
.select("_id name description manager status createdAt updatedAt")
.exec();
return res.status(200).json({ products: findProduct });
});
//상품 수정 API
router.patch("/products/:productId", async (req, res, next) => {
const { productId } = req.params;
const { name, description, manager, password, status } = req.body;
const currentProduct = await Product.findById(productId).exec();
if (currentProduct.password !== password) {
return res.status(401).json({ message: "비밀번호가 일치하지 않습니다." });
}
await Product.updateOne(
{ _id: productId },
{ $set: { name, description, manager, status } },
);
return res.status(200).json({});
});
//상품 삭제 API
router.delete("/products/:productId", async (req, res, next) => {
const { productId } = req.params;
const { password } = req.body;
const product = await Product.findById(productId).exec();
if (product.password !== password) {
return res.status(401).json({ message: "비밀번호가 일치하지 않습니다." });
}
await Product.deleteOne({ _id: productId });
return res.status(200).json({});
});
반응형
'개발 기초 다지기' 카테고리의 다른 글
내일배움캠프 24일차 : 알고리즘 문제 정리(없는 숫자 더하기, 제일 작은 수 제거하기, 가운데 글자 가져오기, 내적, 약수의 개수와 덧셈) (0) | 2024.05.20 |
---|---|
내일배움캠프 23일차 : VS Code Node.js 프로젝트 초기 세팅 (0) | 2024.05.17 |
내일배움캠프 21일차 : AWS 및 git ssh key오류 (port22 : Operation timed out) (0) | 2024.05.15 |
내일배움캠프 20일차 : 알고리즘 문제 정리(콜라츠 추측, 서울에서 김서방 찾기, 음양 더하기, 핸드폰 번호 가리기) (0) | 2024.05.15 |
내일배움캠프 19일차 : 대표적인 HTTP 상태 코드 정리 (0) | 2024.05.15 |
댓글