-
글쓴이글
-
2023년 5월 16일 05:09 #83352
치칫참가자유저간 채팅기능2에 있는대로 맨위에 const { ObjectId } = require('mongodb'); 추가후 var 저장할건 = { title : req.user.nickname+'님이만든채팅방', member : [req.body.글작성자,req.user.nickname], date : new Date() } ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ member부분에서 [ObjectId(req.body.글작성자),ObjectId(req.user.nickname)] 로 오브젝트아이디로 고치면 list.ejs에서 ajax 요청이 오류나 나네요 obejctid 안붙히면 정상 작동되는데 이유를 모르겠어요
둘다 db안에는 문자열 " "안에있는걸로만 나와요 둘다 리스트ejs에서 오류메시지는 이렇게 나옵니다 jquery-3.4.1.min.js:2 POST http://localhost:8080/chatroom 500 (Internal Server Error) send @ jquery-3.4.1.min.js:2 ajax @ jquery-3.4.1.min.js:2 k.<computed> @ jquery-3.4.1.min.js:2 (anonymous) @ list:122 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 밑에는 list.ejs 스크립트 부분이에요 ㅡㅡㅡㅡㅡㅡㅡㅡ
document.querySelectorAll('.chat').forEach((c)=>{ c.addEventListener('click', function(e){ var id = e.target.dataset.id; $.post('/chatroom', {글작성자 : id}) .then(()=>{ console.log('성공') })
}) })
2023년 5월 16일 21:11 #83497
치칫참가자var 저장할건 = { title : req.user.nickname+'님이만든채팅방', member : [req.body.글작성자,req.user.nickname], date : new Date() } console.log(저장할건) 으로 출력하면 { title: '안뇽님이만든채팅방', member: [ '쏘옹', '안뇽' ], date: 2023-05-16T12:09:06.394Z } 으로 나와요 이상태에서 objectid만 붙여보니까 콘솔창에 Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters 라는 오류가나오네요
2023년 5월 17일 13:48 #83555
치칫참가자선생님 쉬운질문을 계속해서 정말 죄송한대 댓글기능을 만들었는데 삭제기능도 만들고싶은데 삭제버튼을 눌렀을때 db에있는 _id값을 비교해서 똑같으면 삭제하는식으로 하고싶은데 html--------- <button class="rpdelete btn btn-secondary" style="font-size: 12px;" data-id=" <%= data2[i]._id%>">댓글삭제</button> ---------- script---------
$('.rpdelete').click(function(e){ var 삭제버튼 = e.target.dataset.id; $.ajax({ method : 'DELETE', url : '/rpdelete', data : {_id : 삭제버튼} }).done(function(rst){ window.location.reload(); }).fail(function(a,b,c){ console.log(a,b,c) })
});
----------------------- 이상태에서 console.log로 받으면 그냥 문자형으로 나오는거같아서 app.delete('/rpdelete',(req,res)=>{ db.collection('comment').deleteOne({_id : req.body._id},(err,rst)=>{ res.status(200).send() }) }) 이렇게하면 값자체는 646455a54dd38052e05fb11b 이런식으로 잘나오는데 db에있는 _id는 objectid라서 그런지 이상태에서 req.body._id부분에 parseInt objectid 이런 잡다한거 다넣어봤는대도 삭제가 안되네요 첫강의에 글에 글순서 만드신게 이런이유인거같긴한대 댓글이다보니까 카운터를 넣기도 좀그런거같아서 찾아보니까 mongoose를쓰면 되는것같은데 안쓰고하고싶은데 아니면 date랑 부모값으로넣은숫자랑 작성자 세개가 일치한것만 삭제하게하는 방법도 괜찮을까요 어째야 할지 감이 잘안잡히네요 정말 죄송합니다..ㅜ
2023년 5월 17일 16:02 #83583
codingapple키 마스터ObjectId()로 저장되어있으면 ObjectId(req.body._id) 하면 삭제 잘 됩니다 document만들면 자동발급되는 objectid 쓰는게 제일 편합니다
2023년 5월 17일 22:45 #83639
치칫참가자제가 전에쓴게 선생님 말씀대로 한것같은데 안되가지구요 ㅠ
db코멘트안에 있는 _id값을 삭제버튼에 넣고 삭제버튼을누르면 그값을 서버로보내서 _id를 출력해보면 646455a54dd38052e05fb11b 이런식으로 잘나오는데 그걸 db.collection('comment').deleteOne({_id : req.body._id},(err,rst)=>{ }) 여기에 넣어서 _id가 req.body._id 인거랑 같으면 삭제하게 짤려했는대 출력된건 그냥 646455a54dd38052e05fb11b고 db에 있는건 objectid(''646455a54dd38052e05fb11b') 여서 그런지 인식이 안되는데 OBJECTID(req.body._id)를 해도 Argument passed in must be a single String of 12 bytes or a string of 24 hex characters 라는 오류만 뜨네요 선생님 오브젝트아이디 넣은거랑 똑같은 형식인데 왜안될까요.. ""안에 넣을려고 ObjectId(JSON.stringify(req.body.되라)) 이런 별짓도 다해봤는대 도저히 안되네요 ㅜ
검색을 하다보니 https://codingapple.com/forums/topic/%E2%99%A3-%EC%82%AD%EC%A0%9C%EB%B2%84%ED%8A%BC-%EA%B8%B0%EB%8A%A5%EA%B5%AC%ED%98%84-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%AC%EA%B2%A0%EC%8A%B5%EB%8B%88%EB%8B%A4/ 이분이랑 같은 질문인거같은데 선생님이 저기에 답변하신
저건 _id : ObjectId('번호') 이렇게 저장되어있는데 삭제요청은 _id : '번호' 이걸 삭제하라고 해서 그렇습니다
ObjectId에 담아서 삭제요청날리면 됩니다 의 objectid에 담는법을 모르겠습니다 ObjectId(담기)를하면 저위에말한 오류가나서......
-
글쓴이글
- 답변은 로그인 후 가능합니다.