• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 objectid 질문

objectid 질문

  • 이 주제에는 11개 답변, 2명 참여가 있으며 치칫2 년, 2 월 전에 전에 마지막으로 업데이트했습니다.
10 글 보임 - 1 에서 10 까지 (총 12 중에서)
  • 글쓴이
  • #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('성공')
            })
          })
        })
    
    
    
    #83364

    codingapple
    키 마스터
    저장전에 req.body.글작성자, req.user.nickname 둘다 잘 있나 출력해봅시다
    #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
    라는 오류가나오네요
    #83498

    치칫
    참가자
    `
    #83531

    codingapple
    키 마스터
    '쏘옹' 이건 objectId가 아니라서 ObjectId() 안에 넣으면 안될듯요
    #83540

    치칫
    참가자
    그럼 그냥 저대로 써도 문제없는건가요?
    
    
    #83542

    codingapple
    키 마스터
    넴 근데 다른유저와 이름 중복이 생길수도 있겠군요
    #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랑 부모값으로넣은숫자랑 작성자 세개가 일치한것만 삭제하게하는 방법도 괜찮을까요
    어째야 할지 감이 잘안잡히네요 정말 죄송합니다..ㅜ
    
    
    #83583

    codingapple
    키 마스터
    ObjectId()로 저장되어있으면 ObjectId(req.body._id) 하면 삭제 잘 됩니다 
    document만들면 자동발급되는 objectid 쓰는게 제일 편합니다
    #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(담기)를하면 저위에말한 오류가나서......
    
    
    
    
    
    
    		
    	
10 글 보임 - 1 에서 10 까지 (총 12 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠