-
축스피드 프로젝트 2 게시글 생성, 수정, 삭제 (백엔드)Projects/노드레인저 - 축스피드 (team) 2023. 7. 3. 18:01
오늘은 기존 개인과제를 토대로 해서 백엔드(router)에서의 기본 뼈대를 만들었다.
내가맡은 역할은 게시글 생성, 수정, 삭제, 백엔드 및 프론트엔드였다. 저번 과제와 다른 점은, 저번 과제는 유저로부터 입력받는 모든 값이 텍스트였던 반면 이번엔 카테고리설정 및 이미지파일 첨부도 하기로 했다.
Models 스키마에 News와 User를 넣고 각각 컬럼을 만들어서, 그에 받는 값을 request받게 했다. 아래는 코드 전문.
middlewares 폴더에 사용자인증미들웨어 (Auth-middleware)와 사진업로드 미들웨어(upload-middleware)를 구현했고, 두개를 상단에 변수선언하고 게시글 생성의 라우터 콜백함수에 넣었다. (게시글 수정에서 끝내 사진업로드는 구현하지는 못했다. 사진업로드 미들웨어는 multer s3를 사용하였고, 다음 포스팅에서 설명하겠다.)
const express = require("express"); const router = express.Router(); const authMiddleware = require("../middlewares/auth-middleware.js") const { News, Users } = require("../models"); const { Op } = require("sequelize"); const upload = require("../middlewares/upload-middleware.js"); // 게시글 작성 POST : localhost:3018/api/news (로그인 이후 작성 성공) router.post("/news", authMiddleware, upload.single('image'), async(req, res) => { //authMiddleware, upload.single('image'), try{ const { userId } = res.locals.user; console.log(userId) // 정상출력 const { title, content, category } = req.body; console.log(title) // 정상출력 console.log(content) // 정상출력 console.log(category) // 정상출력 const imageUrl = req.file.location; // 유효성 검사 if (!title) { return res.status(400).json({ message: "제목을 입력해주세요." }) } else if (!content) { return res.status(400).json({ message: "내용을 입력해주세요." }) } else if (!category) { return res.status(400).json({ message: "카테고리를 선택해주세요." }) } else if (!userId) { return res.status(400).json({ message: "게시글 작성 권한이 없습니다. 로그인 해주세요." }) } // key값에는 model에 있는 스키마, value에는 req.body값 await News.create({ title, content, img:imageUrl, category, userId, }); return res.status(200).send("<script> alert('게시글이 작성되었습니다'); location.href='/'</script>") // html에 코드 출력 } catch (error){ console.error(error); res.status(401).json({ message: "비정상적인 접근입니다." }) } }) // 게시글 수정 PUT : localhost:3018/api/news/newsId (성공) router.put("/news/:newsId", authMiddleware, async(req, res) => { //upload.single('image') const { newsId } = req.params; const { userId } = res.locals.user; const { title, content, category } = req.body; // const imageUrl = req.file.location; const post = await News.findOne({where: { newsId }}); // 유효성 검사 if (!post) { return res.status(404).json({ message: "게시글이 존재하지 않습니다." }) } else if (userId !== post.userId) { return res.status(404).json({ message: "게시글 수정 권한이 없습니다." }) } else if (!title) { return res.status(404).json({ message: "제목을 입력해주세요." }) } else if (!content) { return res.status(404).json({ message: "내용을 입력해주세요." }) } else if (!category) { return res.status(400).json({ message: "카테고리를 선택해주세요." }) } // 수정 await News.update( { title, content, category },// img:imageUrl userId, { where: { newsId } } ); res.send("<script> alert('게시글이 수정되었습니다')</script>"); }); // 게시글 삭제 DELETE : localhost:3018/api/news/newsId router.delete("/news/:newsId", authMiddleware, async (req, res) => { const { newsId } = req.params; const { userId } = res.locals.user; const post = await News.findOne({ where: { newsId } }); if (!post) { return res.status(404).json({ errorMessage: "게시글이 존재하지 않습니다." }); } else if (post.userId !== userId) { return res.status(404).json({ errorMessage: "게시글 삭제 권한이 없습니다." }); } await News.destroy({ where: { newsId } }); res.send({ result: "success" }); }); module.exports = router;
'Projects > 노드레인저 - 축스피드 (team)' 카테고리의 다른 글
축스피드 프로젝트 5 완성 (0) 2023.07.03 축스피드 프로젝트 4 게시글 생성, 수정, 삭제 (프론트엔드) (0) 2023.07.03 축스피드 프로젝트 3 (Multer S3 라이브러리 사진 업로드) (0) 2023.07.03 축스피드 프로젝트 1 역할분배, 와이어프레임, ERD, API 명세 (0) 2023.07.03