나는 mongodb를 사용하기 때문에 remove(구버전이라 이제 사용 X), deleteOne(), deleteMany() 등의 명령어를 사용해서 document를 삭제해야하는 데 삭제가 안됐다.
해결하고보니 두 가지의 문제점이 있었다.
문제점
1. 형식 (출처 : https://sehwan93.github.io/oracle/2021-06-20-mongodb2/)
db.{COLLECTION_NAME}.remove({query},{justOne}) 방식으로 작성해야한다.
내가 원래 시도했던 코드는 아래였다.
backend/routes/index.js
var User = require('./mongodbuser'); // DB 스키마 파일 참조
User.deleteOne();
왜 앞에 User라고 적었냐면 기존에 사용하던 DB 생성, find, findOne 전부 앞에 User.~라고 사용했고 잘 작동했기 때문이었다.
그러나 저 참고한 곳에서 명령어 형식을 보고 혹시..? 라는 생각에 아래와 같이 코드를 작성했고 에러가 생겼다. (원래는 에러도 안 생기고 삭제가 안 되기만 했음)
router.get('/secession', (req, res) => {
User.find({name : req.cookies.session},(err, users) => {
if(!req.cookies.session || err) { // 정보/쿠키 없거나 에러 났을 때
res.redirect('/');
} else {
users.deleteOne();
res.clearCookie('session');
res.redirect('/');
}
})
})
이렇게 작성했을 때 발생한 에러는 deleteOne is not a function
2. find 사용
에러가 생겼을 때 구글링을 했고 deleteOne이 remove보다 최신 버전인 걸 알고 있는 상태였는데 deleteAndfindeOne ? 인가 이런 함수가 최신 버전이니 이 명령어를 쓰라고 스택에 적혀있었고 해봤으나 역시나 똑같은 오류가 생겼다.
알고보니 버전의 문제가 아니었고 find가 아니라 findOne을 쓰니 정상동작했다.
<성공한 코드>
router.get('/secession', (req, res) => {
User.findOne({name : req.cookies.session},(err, users) => {
if(!req.cookies.session || err) { // 정보/쿠키 없거나 에러 났을 때
res.redirect('/');
} else {
users.deleteOne();
res.clearCookie('session');
res.redirect('/');
}
})
})
드디어 탈퇴 기능이 구현됐다.
'Node.js' 카테고리의 다른 글
[Node.js, Vue.js] alert 띄우기 (0) | 2021.12.31 |
---|---|
[Node.js, Vue.js] res.json으로 Vue에 값 전달하기 (0) | 2021.12.26 |
[Node.js, Vue.js] 로그인 시 alert 띄우기 (0) | 2021.12.19 |
[AWS, Node.js, Vue.js] 배포 후 쿠키 문제 (0) | 2021.11.30 |
[Node.js, Vue.js] {배포 준비} 패스워드 암호화하기(+로그인) (0) | 2021.11.25 |