본문 바로가기

JavaScript/Node.js Lecture

10. Node.js Mongodb를 사용한 게시판 (1)

우와 여러분들! 효근이에요! 

지금까지 배운 것을 활용하여 게시판을 만들어볼겁니다.

기능으로는 로그인, 유저, 글 쓰기, 글 수정, 글 삭제, 글 불러오기, 글 제목 검색, 댓글 달기 등이 있습니다.

이번 시간엔 로그인, 유저, 글 쓰기, 수정, 삭제, 글 리스트 불러오기 까지 해보겠습니다.

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