[BUG] BSON Error
SeoMiYoung opened this issue ยท comments
๐ถ ์๋ฌ ๋ฌธ๊ตฌ
[์๋ฌ ๋ฐ์ ์ฝ๋]
new ObjectId(์์ฒญ.params.id) => ์ด ๋ถ๋ถ์์ ์๋ฌ ๋ฐ์
app.get('/detail/:id', async(์์ฒญ, ์๋ต) => {
try {
// collection์ ์๋ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ document๋ง ๊ฐ์ ธ์์ฃผ์ธ์.
let result = await db.collection('shopData').findOne({ _id : new ObjectId(์์ฒญ.params.id)})
console.log(result)
์๋ต.render('detail.ejs', {result: result})
} catch(e) {
// ์๋ฌ๋ฉ์์ง ์ถ๋ ฅ
console.log(e)
// ๊ทธ๋ฅ ์๋ต.sendํด์ค๋ ๋๊ธดํ๋ฐ, status์ฐ๋ฉด user๊ฐ ์ด๋ค ๋ฌธ์ ์ธ์ง ์ ํ์
๊ฐ๋ฅ
// status(5**): ์๋ฒ๋ฌธ์ ์
// status(4**): user๋ฌธ์ ์
์๋ต.status(404).send('url์ด ์ด์ํด์ ์๋ฌ ๋ฐ์')
}
})
๐ถ ์ค๋ฅ ์์ธ
ํด๋น ์๋ฌ๋ MongoDB์์ ๊ฐ์ฒด ID(ObjectId)๋ฅผ ์์ฑํ ๋, ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ก, ์ฃผ์ด์ง ์ธ์๊ฐ 12๋ฐ์ดํธ ๊ธธ์ด์ ๋ฌธ์์ด, 24๊ฐ์ 16์ง์ ๋ฌธ์๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด, ๋๋ ์ ์์ฌ์ผํจ์ ์๋ฏธํฉ๋๋ค. ์ด ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ฌ๋ฐ๋ฅธ ํ์์ ์ธ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ค๋ฅ ์์ธ์ 2๊ฐ์ง๋ก ๋ณผ ์ ์์ต๋๋ค.
(1) ์๋ชป๋ ํ์์ ID์ฌ์ฉ
MongoDB ObjectId๋ 12๋ฐ์ดํธ์ ๋ฐ์ด๋๋ฆฌ ๊ฐ ๋๋ 24์๋ฆฌ์ 16์ง์ ๋ฌธ์์ด๋ก ํํ๋ฉ๋๋ค. ๋ง์ฝ ์ด ํ์์ ๋ฐ๋ฅด์ง ์๋ ์ธ์๋ฅผ ์ ๋ฌํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
(2) ๋น ๋ฌธ์์ด ๋๋ null๊ฐ ์ ๋ฌ
ObjectId ์์ฑ ์ ์ ํจํ์ง ์์ ๊ฐ์ด ์ ๋ฌ๋ ๊ฒฝ์ฐ์ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ฆ, ๊ธธ์ด๋ ๊ตฌ์ฑ ํ์์ ๋ง์ท์ผ๋, ๊ทธ์ ํด๋นํ๋ id๊ฐ ์๋ ๊ฒฝ์ฐ์๋ null์ด ์ ๋ฌ๋์, ๋ค์ ์ฌ์ง๊ณผ ๊ฐ์ด null(result์)์ด ๋ค์ด์์ dot์ผ๋ก title๊ณผ ๊ฐ์ ๊ฒ์ ์ ๊ทผํ ์ ์๋ค๋ ์๋ฌ๊ฐ ๋น๋๋ค.
๐ถ ํด๊ฒฐ
if/else๋ฌธ์ผ๋ก null์ด ๋ค์ด์์๋๋ฅผ ํด๊ฒฐํด์ฃผ์๋ค.
app.get('/detail/:id', async(์์ฒญ, ์๋ต) => {
try {
// collection์ ์๋ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ document๋ง ๊ฐ์ ธ์์ฃผ์ธ์.
let result = await db.collection('shopData').findOne({ _id : new ObjectId(์์ฒญ.params.id)})
console.log(result)
if (result == null) {
์๋ต.status(404).send('url์ ํด๋นํ๋ id์์')
}
else {
์๋ต.render('detail.ejs', {result: result})
}
} catch(e) {
// ์๋ฌ๋ฉ์์ง ์ถ๋ ฅ
console.log(e)
// ๊ทธ๋ฅ ์๋ต.sendํด์ค๋ ๋๊ธดํ๋ฐ, status์ฐ๋ฉด user๊ฐ ์ด๋ค ๋ฌธ์ ์ธ์ง ์ ํ์
๊ฐ๋ฅ
// status(5**): ์๋ฒ๋ฌธ์ ์
// status(4**): user๋ฌธ์ ์
์๋ต.status(404).send('url์ด ์ด์ํด์ ์๋ฌ ๋ฐ์')
}
})