반응형
.. 지금 만들던 게시판은 로그인 기능은 넣었으나
누구나 글을 삭제하고 아무나 글을 지울 수 있었음
=> 해결할려면 글 삭제는 작성자만 가능하도록 해야 함
=> add API 수정하면 되겠지? 아이디가 게시글에 부여되도록
일단 가입 기능 추가함
<div class="container mt-4">
<form action="/register" method="POST">
<div class="form-group">
<label>아이디</label>
<input type="text" class="form-control" name="id">
</div>
<div class="form-group">
<label>비번</label>
<input type="password" class="form-control" name="pw">
</div>
<button type="submit" class="btn btn-danger">가입</button>
</form>
</div>
..
app.post('/register', function (요청, 응답) {
db.collection('login').insertOne({ id: 요청.body.id, pw: 요청.body.pw }, function (에러, 결과) {
응답.redirect('/')
})
})
게시글에 작성자명 추가하기
기존 add API 수정..
(연습, 공부인데 그냥 한글로 변수,함수명 하자 헷갈린다..,
그래도 영어로 해야지 맨날 변수명 개떡같이 안짓지 않을까? )
주의!!!! 로그인해서 세션 부여하는 코드보다 아래에 있어야지 req.user 받을 수 있음
app.post('/add', function (req, res) {
// 세션에 저장되어 있는, 로그인할 때 받은 유저의 정보 가져오기
var id = req.user._id; //_id 는 고유하게 부여된 아이디 값
// 게시글 개수를 셀 새로운 컬렉션에서 가져오기
db.collection('counter').findOne({ name: '게시물개수' }, (err, result) => {
console.log(result.totalPost);
var artilceCount = result.totalPost;
var 저장할거 = { _id: artilceCount + 1, writer : id , date: req.body.date, title: req.body.title}
// post collection 에 데이터 insert
db.collection('post').insertOne( 저장할거, (error, result) => {
console.log('save complete')
// 저장 완료 후 totalPost 즉 게시글 id 번호도 1 증가시켜줘야 함
db.collection('counter').updateOne({ name: '게시물개수' }, { $inc: { totalPost: 1 } }, (err, res) => {
if (err) return console.log(err);
})
})
// 마지막에 넣으렴
res.redirect("/list")
});
})
denormalizing?'
더보기
- 보통 SQL Database 들은 참조하는 테이블이 있을 때 공통된 id 즉 reference Key 하나만 추가해 놓지만
noSQL database 들은 그거 말고 그냥 이름 비번 등 부가 정보다 싹다 때려박아서 게시물에 같이 저장함
- 왜 와이? 원래 sql db 들이 하던거처럼 하면 데이터가 필요할 때 참조 key 에 따라서 원래 테이블 가서
select 하고 또 뒤져야 함 = 이러면 컬렉션 검색하는 횟수가 늘어남 = 결국 검색속도가 느려짐
- 디비에 저장되는 용량은 커지지만 검색속도는 빠르게 함
- 근데 유저 아이디 바꿀려면 또 전부 다 찾아서 바꿔야 하는데 왜...? 몰라 그냥 그런 특성이래
내 게시물일 때만 삭제할 수 있게하기
기존 delete API 수정 (조건 하나 추가)
app.delete('/delete', function (요청, 응답) {
요청.body._id = parseInt(요청.body._id);
//요청.body에 담겨온 게시물번호를 가진 글을 db에서 찾아서 삭제해주세요
db.collection('post').deleteOne({_id : 요청.body._id, 작성자 : 요청.user._id }, function (에러, 결과) {
console.log('삭제완료');
console.log('에러',에러)
응답.status(200).send({ message: '성공했습니다' });
})
});
반응형
'JavaScript > Node.js' 카테고리의 다른 글
#노드 채팅방 -1 (0) | 2023.02.20 |
---|---|
#노드 커넥션풀 #노드 몽고db 커넥션 풀 (0) | 2023.02.20 |
#노드 라우터 분리 (0) | 2023.02.20 |
#노드 로그인 #기본 세션 로그인기능 (0) | 2023.02.19 |
#페이지조회 #수정 #node form put&delete (0) | 2023.02.13 |