본문 바로가기
Node.js

server.js - urlParams 오류 수정

by 세인트킴 2024. 2. 4.
app.get('/detail/:id', async (req, res) => {
  try {
    // req.params.id = parseInt(req.params.id) 얘가 문제를 일으킨다.
    let result = await db.collection('post').findOne({ _id : new ObjectId(req.params.id) })
    res.render('detail.ejs', { result : result })
    if (result == null) {
      res.status(400).send('404 Not Found')
    }
  } catch(err) {
    console.error(err)
  }
})

parseInt를 실행하면 오류가 발생한다. parseInt는 문자열 형태로 들어온 req.params.id를 숫자로 변환해서 오류를 발생시키지 않도록 해주는 것이지만 MongoDB의 ObjectId는 16진수 문자열로 구성되어 있기 때문에 오류가 발생하지 않는다.

 

그리고 ObjectId를 생성할 때는 주로 문자열로 전달한다. 문자열로 ObjectId를 전달해야 하는데 parseInt를 통해 숫자로 전달하게 되면 오류가 발생한다.

오류 메세지

더보기

BSONError: Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer
    at new ObjectId (/Users/SaintKim/Documents/forum/node_modules/bson/lib/bson.cjs:2055:23)
    at /Users/SaintKim/Documents/forum/server.js:60:62
    at Layer.handle [as handle_request] (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/route.js:144:13)
    at Route.dispatch (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/route.js:114:3)
    at Layer.handle [as handle_request] (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/layer.js:95:5)
    at /Users/SaintKim/Documents/forum/node_modules/express/lib/router/index.js:284:15
    at param (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/index.js:365:14)
    at param (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/index.js:376:14)
    at Function.process_params (/Users/SaintKim/Documents/forum/node_modules/express/lib/router/index.js:421:3)

 

'Node.js' 카테고리의 다른 글

MongoDB 비밀번호 암호화  (2) 2024.02.06
list.ejs - 삭제기능 구현 오류  (0) 2024.02.06
수정 오류 해결 - correction.ejs  (0) 2024.02.04
ejs - 문법 오류 에러  (0) 2024.02.04
list.ejs - css 적용 안됨 오류 해결  (0) 2024.02.02