우와 여러분들! 효근이에요!
지금까지 배운 것을 활용하여 게시판을 만들어볼겁니다.
기능으로는 로그인, 유저, 글 쓰기, 글 수정, 글 삭제, 글 불러오기, 글 제목 검색, 댓글 달기 등이 있습니다.
이번 시간엔 로그인, 유저, 글 쓰기, 수정, 삭제, 글 리스트 불러오기 까지 해보겠습니다.
DB
var UsersSchema = new mongoose.Schema({
id: String,
name: String,
token: String, // 유저 고유 토큰
password: String,
});
var NoticeSchema = new mongoose.Schema({
writer: String, // 쓴 사람의 token
title: String, // 글 제목
content: String, // 글 내용
noticeToken: String, // 글 고유 값
writeDate: { type: Date, default: new Date() }, // 글 작성 날짜
});
Notices = mongoose.model('notices', NoticeSchema);
Users = mongoose.model('users', UsersSchema);
스키마는 위의 구조대로 진행합니다.
routes/auth.js
module.exports = (router, Users, randomString) => {
// 로그인
router.post('/signin', async (req, res) => {
let user = await Users.findOne({ id: req.body.id, password: req.body.password });
if (!user) return res.status(404).json({ message: 'Users Not Found!' });
else return res.status(200).json({ data: user });
});
// 회원가입
router.post('/signup', async (req, res) => {
let new_user = new Users(req.body);
try {
new_user.token = randomString.generate(25);
await new_user.save();
return res.status(200).json({ data: new_user });
} catch (e) {
console.log(e);
return res.status(500).json({ message: 'Sign Up Faild!' });
}
});
return router;
};
로그인과 회원가입입니다. 전에 배웠던 것을 응용했습니다.
/routes/notice.js
module.exports = (router, Users, Notices, randomString) => {
// 글 작성
router.post('/add', async (req, res) => {
let new_notice = new Notices({
writer: req.body.token,
title: req.body.title,
content: req.body.content,
noticeToken: randomString.generate(12), // 랜덤한 문자열 12자리 생성
});
try {
await new_notice.save();
return res.status(200).json({ data: new_notice });
} catch (e) {
return res.status(500).json({ message: 'add Fail' });
}
});
// 글 리스트 불러오기
router.get('/getList', async (req, res) => {
let list = await Notices.find(); // 전체 리스트 불러오기.
return res.status(200).json({ data: list });
});
// 글 불러오기
router.get('/get/:noticeToken', async (req, res) => {
let notice = await Notices.findOne({ noticeToken: req.params.noticeToken });
if (notice) {
let user = await Users.findOne({ token: notice.writer }); // 작성자 이름을 얻기 위해, 토큰으로 검색
return res.status(200).json({ data: { ...notice._doc, writerName: user.name } });
}
return res.status(500).json({ message: 'Notice Not Found' });
});
// 글 삭제
router.post('/del', async (req, res) => {
let result = await Notices.deleteOne({ noticeToken: req.body.noticeToken, writer: req.body.token });
if (result.ok) return res.status(200).json({ message: 'success!' });
else return res.status(500).json({ message: 'Delete Fail!' });
});
// 글 수정
router.post('/modify', async (req, res) => {
let result = await Notices.updateOne(
{
noticeToken: req.body.noticeToken,
writer: req.body.token,
},
{ $set: { content: req.body.content } }
);
if (result.ok) return res.status(200).json({ message: 'success!' });
else return res.status(500).json({ message: 'Delete Fail!' });
});
return router;
};
To-Do List를 만들었을 떄와 큰 차이가 없습니다.
noticeToken과 writer를 둘 다 준 것은, 수정과 삭제는 본인만이 할 수 있어야 하기 떄문입니다.
다음은 글 제목 검색과 댓글 달기를 진행하겠습니다.
'JavaScript > Node.js Lecture' 카테고리의 다른 글
11. Node.js Mongodb를 사용한 게시판 (2) (2) | 2020.11.19 |
---|---|
9. Node.js Multer 이미지 업로드 (0) | 2020.11.19 |
8. Node.js cors (0) | 2020.11.19 |
7. Node.js Route, export (0) | 2020.11.19 |
6. Node.js To-Do List (0) | 2020.11.19 |