728x90
내일배움캠프 4기_Node입문 개인과제 24일차 TIL
개인과제
- 전체 게시글 목록 조회 API
- 제목, 작성자명, 작성 날짜를 조회하기
- 작성 날짜 기준으로 내림차순 정렬하기
- 게시글 작성 API
- 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
- 게시글 조회 API
- 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
- 게시글 수정 API
- API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 수정되게 하기
- 게시글 삭제 API
- API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 삭제되게 하기
- 댓글 목록 조회
- 조회하는 게시글에 작성된 모든 댓글을 목록 형식으로 볼 수 있도록 하기
- 작성 날짜 기준으로 내림차순 정렬하기
- 댓글 작성
- 댓글 내용을 비워둔 채 댓글 작성 API를 호출하면 "댓글 내용을 입력해주세요" 라는 메세지를 return하기
- 댓글 내용을 입력하고 댓글 작성 API를 호출한 경우 작성한 댓글을 추가하기
- 댓글 수정
- 댓글 내용을 비워둔 채 댓글 수정 API를 호출하면 "댓글 내용을 입력해주세요" 라는 메세지를 return하기
- 댓글 내용을 입력하고 댓글 수정 API를 호출한 경우 작성한 댓글을 수정하기
- 댓글 삭제
- 원하는 댓글을 삭제하기
mongoose Schema option
{timestamps: true}
처음에 스키마 옵션이 있는지 모르고
> dt = new Date()
Thu Dec 15 2022 19:52:35 GMT+0900 (한국 표준시)
> dt.toISOString();
'2022-12-15T10:52:35.678Z'
현재 날짜를 생성해서 db create할 때 넣어줘야 하는 줄 알았다.
다른 분이 제출한 코드를 바탕으로 공부하니, 스키마 옵션이 있었다!!
/schemas/post.js
const mongoose = require("mongoose");
const postSchema = new mongoose.Schema({
user: {
type: String,
required: true
},
password: {
type: String,
required: true
},
title: {
type: String,
required: true
},
content: {
type: String,
required: true
},
}, {timestamps: true});
module.exports = mongoose.model("Post", postSchema);
입문주차 과제 API
멘붕...ㅎㅎㅎㅎㅎ
게시물 생성까지는 어렵지 않게 구현했지만, 예외처리, 오류 발생처리가 어려웠다.
다른분이 한거 보고 try-catch를 활용해 예외처리 한다는 점을 알게되었다!
/routes/posts.js
// 게시글 작성
router.post("/posts", async(req, res) => {
try{
const { user, password, title, content } = req.body;
await Post.create({user, password, title, content});
res.status(200).json({
message: "게시글을 생성하였습니다.",
});
} catch(err){
res.status(400).json({
message: "데이터 형식이 올바르지 않습니다."
});
}
});
// 게시글 조회
router.get('/posts', async(req, res) => {
const posts = await Post.find({}).sort({createdAt:-1});
const results = posts.map((post) => {
return {
"postId": post._id,
"user": post.user,
"title": post.title,
"createdAt": post.createdAt
}
})
res.status(200).json({
"data": results
})
});
댓글 수정
너무 막막.. 접근방법 생각하느라 골먹었다.
나는 그냥 uri를 통해 들어온 postid가 post테이블에 없으면 댓글을 작성할 수 없게 했다.
{ _postId:postId }
// { "postId" : _postID } KEY-VALUE 형태
postid를 comment테이블에 참조키마냥 넣었다.
const Post = require("../schemas/post.js");
const Comment = require("../schemas/comment.js");
// 댓글 생성
router.post('/comments/:_postId', async(req,res) => {
try{
const { _postId:postId } = req.params;
const { user, password, content } = req.body;
if(content === undefined){
return res.status(400).json({
message: "댓글 내용을 입력해 주세요."
})
}
const existsPost = await Post.find({_id:postId});
if(existsPost.length){
await Comment.create({ postId, user, password, content});
}
res.status(200).json({
message: "댓글을 생성하였습니다.",
});
} catch (err){
res.status(400).json({
message: "데이터 형식이 올바르지 않습니다."
});
}
});
댓글 수정&삭제 예외처리는 너무 어렵다...
좀더 고민해봐야 겠다.
'TIL' 카테고리의 다른 글
내일배움캠프 4기_Node숙련 26일차 TIL (0) | 2022.12.19 |
---|---|
내일배움캠프 4기_Node입문 개인과제 25일차 TIL (0) | 2022.12.16 |
내일배움캠프 4기_JS기초&알고리즘 23일차 TIL (0) | 2022.12.14 |
내일배움캠프 4기_JS기초&알고리즘 22일차 TIL (0) | 2022.12.13 |
내일배움캠프 4기_JS기초 21일차 TIL (0) | 2022.12.12 |