๋ชฉ์ฐจ
์ด๋ฒ์๋ URL ํ๋ผ๋ฏธํฐ ๋ฌธ๋ฒ์ ์ด์ฉํด ์์ธํ์ด์ง๋ฅผ ์ ์ํด๋ณด์.
0. ์์ธํ์ด์ง ํํ
์ง๊ธ๊น์ง๋ ๋ฃจํธ('/')์์ ์ง์ ์ ์ํ๋ ํ์ด์ง๋ค์ ์ ์ํ๋ค๋ฉด
์์ธํ์ด์ง๋ /parent/child/... ์ ํํ์ด๋ค.
์ด๊ฒ์ ์ด์ฉํ๋ฉด url์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ ์ ์๊ณ ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ ๊ฒ์ด๋ค.
์์ธํ์ด์ง๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ํด์ผํ ๊น?
/page/detail1, /page/detail2, ... ์ด๋ ๊ฒ ํ๋์ฉ ๋ง๋ค์ด๋ ๊ฐ๋ฅํ์ง๋ง,
ํ์ด์ง ์๋งํผ ๋ง๋ค์ด์ผํ๋ ๊ฒ์ ๋๋ฌด๋๋ ๋นํจ์จ์ ์ด๋ค.
์ด๊ฒ์ ๊ฐํธํ๊ฒ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฟ์์ง๋ง ๊ทธ์ค ํ๋๊ฐ ๋ฐ๋ก URL ํ๋ผ๋ฏธํฐ ๋ฌธ๋ฒ์ด๋ค.
1. URL ํ๋ผ๋ฏธํฐ ๋ฌธ๋ฒ
ํํ
/๋ถ๋ชจurl/:์์url
์์ ๊ฐ์ด /:์์url ์ด URLํ๋ผ๋ฏธํฐ ๋ฌธ๋ฒ์ด๋ค.
์ด๋ฅผ ์๋ฒ์ ๋ฑ๋กํ๋ฉด ๋ถ๋ชจurl/ ์์์ ์์url path์ ์ ์ํ๋ฉด ํด๋น URL์ GET์์ฒญํ ๊ฒ์ผ๋ก ์ธ์ํ๋ค.
์ด๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฑ๋กํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
์ฌ์ฉ๋ฒ
app.get('/๋ถ๋ชจURL/์์URL', (request, response)=>{
...
})
์์
app.get('/detail/:num', (request, response)=>{
response.render('detail.ejs');
})
detail/:ํ๋ผ๋ฏธํฐ๋ช ์ ์๋ฒ์ ๋ฑ๋กํ์๋ค.
์ด ์์์์๋ DB์ ์ ์ฅ๋์ด์๋ ํฌ์คํธ์ id๋ฅผ ์ด์ฉํด ํฌ์คํธ ๋ค์ ๊ฐ์ ธ์๋ณผ ์์ ์ด๋ค.
2. ์์ธ ํ์ด์ง ๊ตฌํํ๊ธฐ
[๊ณผ์ ์์ฝ]
1. ์ ์ ๊ฐ /detail/... ์ ์
2. ์๋ฒ์์ ํด๋น id๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ DB์์ ์ฐพ๊ธฐ
3. ์ฐพ์ ๋ฐ์ดํฐ๋ฅผ EJSํ์ผ์ ๋ณด๋ด์ค
1) ๋ฐ์ดํฐ์ ์ ์ํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ (request.params)
URLํ๋ผ๋ฏธํฐ์ ์ ๋ฌ๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ request.params๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
app.get('/detail/:num', (request, response)=>{
console.log(request.params)
response.render('detail.ejs');
})
์ด๋ ๊ฒ ๊ฐ์ฒด์ ํํ๋ก num ํ๋ฆฌ๋ฏธํฐ์ ์ ๋ฌ๋ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
2) DB์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
const { MongoClient, ObjectId} = require('mongodb');
...
app.get('/detail/:num', async(request, response)=>{
let result = await db.collection('post').findOne({_id : new ObjectId(request.params.num)})
response.render('detail.ejs', {result:result});
})
- findOne() :
ํ๋ผ๋ฏธํฐ์ ์ ๋ฌ๋ ์ ๋ณด๋ฅผ ์ด์ฉํด DB์ ๋ฐ์ดํฐ๋ธ๋ก ์ค _id๊ฐ ํด๋น ๋ฐ์ดํฐ์ ๊ฐ์ ๊ฒ์ ํ ๊ฐ ์ฐพ์์จ๋ค.
์ด๋ฅผ ์ํด์ findOne()ํจ์๋ฅผ ์ด์ฉํ๋ค.
- ObjectId():
MongoDB์ ๋ฐ์ดํฐ๋ธ๋ก์ ์ดํด๋ณด๋ฉด _id ์๋ ObjectId()๊ฐ ์ผ๋ จ๋ฒํธ๋ฅผ ๊ฐ์ธ๊ณ ์๋ค.
์ด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ผํ๋ฏ๋ก mongodb ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ import ํด์ฃผ์ด์ผํ๋ค.
์ดํ new ObjectId(...)๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ํน์ ํ๋ค.
3) EJS ํ์ผ ์ค์
{result: result}์ ํํ๋ก ํ์ผ์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฝ์์ค๋ค.
3. ๋งํฌ ์์ฑํ๊ธฐ
์์ธํ์ด์ง์ ๋ค์ด๊ฐ๊ธฐ ์ํ ๋งํฌ๋ฅผ ๋ง๋ค์ด๋ณด์!
๋ฐฉ๋ฒ์ ์ง๊ธ๊น์ง ๋ค๋ฃจ์๋ ๋ด์ฉ์ ๊ทธ๋๋ก ํ์ฉํด์ฃผ๋ฉด ๋๋๋ฐ
list ํ์ด์ง์ ์๋ ๋ธ๋ก์ ํด๋ฆญํ๋ฉด ํด๋น ๊ธ์ ์์ธํ์ด์ง๋ก ์ด๋ํ๋๋ก ๊ตฌํํด๋ณด์!
1) list.ejs ํ์ผ ์ธํ
//server.js
app.get('/list', async (request, response) => {
let result = await db.collection('post').find().toArray();
console.log(result)
response.render('list.ejs', {list : result, image:image});
})
ejs ํ์ผ์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ์ค result๋ DB์ ์ ์ฅ๋ ๋ฐ์ดํฐ ๋ธ๋ก์ด๋ค.
๋ฐ๋ผ์ list.ejs ํ์ผ์์ _id ๋ฅผ ์ด์ฉํด ๋งํฌ๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค.
//list.ejs
...
<a class="postLink" href="/detail/<%= list[i]["_id"] %>">
...
</a>
/detail/<%= list[i]["_id"] %> ๋ก ์ด๋ํ๋๋ก ํ๋ฉด ์ฌ์ ์ ์ ์ํ detail ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋๋ค.
๋!
2) ์ข ๋ ์์ ์ ์ธ ์๋ฒ ๊ธฐ๋ฅ์ ์ํด์ ์์ธ์ฒ๋ฆฌ
detail/:num ์ ํตํด ์ ์ํ ๋ ๋ง์ฝ ์๋ฒ์ ๋ฑ๋ก๋์ด์์ง ์์ _id๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ค๋ฉด
์ฌ์ฉ์์๊ฒ "์กด์ฌํ์ง ์๋ ํ์ด์ง" ๋ฑ์ ๋ฉ์ธ์ง๋ฅผ ๋์์ฃผ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค!
๋จผ์ ์ง์ ์ค๋ฅ๋ฅผ ๋ฃ์ด๋ณด์.
(1) detail/1 ๋ก ์ ์ํ์๋
์๋ฒํ์ผ ๋ด์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ,
12bytes์ string ํํ๋ก ์ ๋ฌํด์ผํ๋ค๋ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ๋ค.
(2) detail/24๊ธ์ ๋ก ์ ์ํ์ ๋
์ด๋ฒ์๋ ejs ํ์ผ์ชฝ์์ null ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ฆ, DB ์ชฝ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๊ฐ null ์ธ ๊ฒ์ด๋ค.
(3) ๊ฐ์ ํด๋ณด๊ธฐ
app.get('/detail/:num', async(request, response)=>{
try{
let result = await db.collection('post').findOne({_id : new ObjectId(request.params.num)})
if (result == null) {
response.status(400).send('์กด์ฌํ์ง ์๋ ๊ธ์
๋๋ค.')
} else {
response.render('detail.ejs', { result : result })
}
}
catch{
response.send("์ค๋ฅ!")
}
})
์์ฒ๋ผ try, catch ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ result๊ฐ null ์ธ ๊ฒฝ์ฐ ์กด์ฌํ์ง ์๋ ๊ธ์์ ๋ฉ์ธ์ง๋ก ๋ฐํํ๋ค.
.status()์ ๋ค์ด๊ฐ๋ ์ฝ๋๋
์ ์ ์ ์๋ชป์ธ ๊ฒฝ์ฐ : 4XX, ์๋ฒ์ ์๋ชป์ธ ๊ฒฝ์ฐ : 5XX ๋ฑ์ผ๋ก ํ์ํ๋ฉฐ
์ฌ์ฉ์๊ฐ ์ด๋ค ๋ถ๋ถ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ์ ์ ์๋๋ก ํ๋ค.
(https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)
'๐ | WEB DEV > NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS+Express] 13. formํ๊ทธ์์ PUT, DELETE ์์ฒญํ๊ธฐ & MongoDB ์์ ๋ฌธ๋ฒ + (0) | 2023.10.15 |
---|---|
[NodeJS+Express] 12. ๊ธ ์์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2023.10.15 |
[NodeJS+Express] 10. ๊ธ ์์ฑ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (MongoDB ๋ฐ์ดํฐ ์ฝ์ ) (1) | 2023.10.14 |
[NodeJS+Express] 9. RESTful API๋? (1) | 2023.10.11 |
[NodeJS+Express] 8. EJS ๋ฌธ๋ฒ ์ ๋ฆฌ (0) | 2023.10.09 |
๋๊ธ