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

home2 게시판 Node.js, Express 게시판 글수정에서 에러 Argument passed in must be a string of 12 bytes

글수정에서 에러 Argument passed in must be a string of 12 bytes

10 글 보임 - 1 에서 10 까지 (총 13 중에서)
  • 글쓴이
  • #104655

    김세준
    참가자
    app.get('/edit/:id' ,async(req, res)=> {
    
    
      let result = await db.collection('post').findOne({ _id : new ObjectId(req.params.id) })
      res.render('edit.ejs',{result:result})
      //react로 치면 props같은거
    })
    app.post('/edit', async(req, res)=> {
      await db.collection('post').updateOne({_id: new ObjectId(req.body.id)},{$set:{title:req.body.title,content:req.body.content}}
      )
      res.redirect('/list')
    })
    일단 글수정하는 server 코드입니다
    
    ================================================================================
    
    <body class="grey-bg">
        <%-include('nav.ejs') %>
            <form class="form-box" action="/edit" method="POST">
                <h4>수정</h4>
                <input name="id" value="<%=result._id%>">
                <input name="title" value="<%=result.title%>">
                <input name="content" value="<%=result.content%>">
                <button type="submit">전송</button>
            </form>
    </body>
    </html>
    edit.ejs 코드입니다
    ================================================================================
    edit.ejs에 코드에는 이상이없고 list에서 detail 까지는 잘됩니다.
    
    edit/글id로 들어가는 순간 아래의 오류가 뜨면서 서버가 다운됩니다
    오류로는
    throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer');
    BSONError: Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer
    
    라고뜹니다
    
    id불러오는게 오류인거같아서 콘솔로 찍어봐도
    6554746f0f8c0bec5b1ae619 잘뜹니다
    C:\Users\k\OneDrive\바탕 화면\forum\node_modules\bson\lib\bson.cjs:2055
             throw new BSONError('Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer');
    
    라고뜨네요 글자수도 24개맞는거같은데...공백도없고...
    혼자 고쳐보겠다고 지금 3시간동안 구글링하면서 고쳐봤는데 허탕입니다ㅠㅠ
    
    
    도와주십셔!!!
    
    
    
     
    #104671

    codingapple
    키 마스터
    edit/글id 이동하는 링크에 이상한문자나 공백이 있을수도요
    #104695

    김세준
    참가자
    그것도 확인했는데 이상이없었습니다 ㅠ
    #104720

    codingapple
    키 마스터
    /edit/6554746f0f8c0bec5b1ae619 직접 입력해서 접속해보면 잘되나 확인해봅시다
    #104735

    김세준
    참가자
    /edit/6554746f0f8c0bec5b1ae619 직접 입력해서 접속하면 넘어는가지는데
    똑같은오류가 반복됩니다
    그래서 오류가뜨면 vscode저장하면 다시 서버가 살아나는것을 이용해서
    죽을때마다 저장>실행>저장>실행 순으로 반복했더니 오류가 계속뜨긴하지만
    수정은됩니다.
    혹시 버젼이 달라서 그런것일까요?
    강의랑 똑같은 코드인데 버젼이 달라서 그런걸까요?
    #104740

    codingapple
    키 마스터
    req.params.id.trim() 한 다음에 ObjectId()안에 넣어봅시다
    #104752

    김세준
    참가자
    app.get('/detail/:id', async(req,res)=> {
      // let result = req.params
        const objectID = new ObjectId(req.params.id.trim())
        let result = await db.collection('post').findOne({ _id : objectID })
        // console.log(req.result)
        
        res.render('detail.ejs', {result: result})
      
    })
    app.get('/edit/:id', async(req, res)=> {
      // db.collection('post').updateOne({},{$set: {}})
      const objectID = new ObjectId(req.params.id.trim())
      let result = await db.collection('post').findOne({ _id: objectID })
      console.log(req.params.id)
      res.render('edit.ejs',{result:result})
      //react로 치면 props같은거
    })
    app.post('/edit', async(req, res)=> {
      const objectID = new ObjectId(req.params.id.trim())
      await db.collection('post').updateOne({_id: objectID},{$set:{title:req.body.title,content:req.body.content}}
      )
     
      res.redirect('/list')
    })
    =================================================================================
    위코드는 objectid를 쓰는 detail,edit 전체 코드입니다
    
    
    
    
    말씀하신대로 new ObjectId(req.params.id.trim()) 로 써서 해봤는데 계속 같은오류를 뱉어내네요
    그래서 구글링해서 변수로 만들어서도 시도를 해봤는데 오류가 뜨네요 하ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ
    #104791

    codingapple
    키 마스터
    위에 app.get('/edit/:id 이런비슷한코드 더 없나 확인해봅시다 
    안되면 다른 프로젝트만들어서 거기로 옮겨보면 됩니다
    app.post('/edit 는 post요청 잘되는거면 수정할필요없을듯요
    
    #104855

    김세준
    참가자
    /detail/:id
    /edit/:id
    /edit 순으로 되어있는데 
    새로 다른파일만들어서도 해봤는데 해결이안되네요ㅜㅜ
    #104862

    김세준
    참가자
    req.params.id 를 콘솔로찍으면
    655474a30f8c0bec5b1ae61a
    main.css
    라고 main.css가 뜨는데 혹시이것때문에 오류가 뜨는걸까요?
     
10 글 보임 - 1 에서 10 까지 (총 13 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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