-
글쓴이글
-
2023년 11월 21일 17:26 #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시간동안 구글링하면서 고쳐봤는데 허탕입니다ㅠㅠ 도와주십셔!!!
2023년 11월 22일 09:19 #104720
codingapple키 마스터/edit/6554746f0f8c0bec5b1ae619 직접 입력해서 접속해보면 잘되나 확인해봅시다
2023년 11월 22일 10:47 #104735
김세준참가자/edit/6554746f0f8c0bec5b1ae619 직접 입력해서 접속하면 넘어는가지는데
똑같은오류가 반복됩니다
그래서 오류가뜨면 vscode저장하면 다시 서버가 살아나는것을 이용해서
죽을때마다 저장>실행>저장>실행 순으로 반복했더니 오류가 계속뜨긴하지만
수정은됩니다.
혹시 버젼이 달라서 그런것일까요?
강의랑 똑같은 코드인데 버젼이 달라서 그런걸까요?
2023년 11월 22일 14:45 #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()) 로 써서 해봤는데 계속 같은오류를 뱉어내네요 그래서 구글링해서 변수로 만들어서도 시도를 해봤는데 오류가 뜨네요 하ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ
2023년 11월 22일 18:56 #104791
codingapple키 마스터위에 app.get('/edit/:id 이런비슷한코드 더 없나 확인해봅시다 안되면 다른 프로젝트만들어서 거기로 옮겨보면 됩니다 app.post('/edit 는 post요청 잘되는거면 수정할필요없을듯요
-
글쓴이글
- 답변은 로그인 후 가능합니다.