๋ชฉ์ฐจ
์ด๋ฒ์๋ ๊ธ์ ์์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด์.
0. ๋ค์ด๊ฐ๊ธฐ์
๊ธ์ ์์ ํ๋ ๊ณผ์ ์ ์์ฝํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
1) ๊ธ ๋ง๋ค ์กด์ฌํ๋ ์์ ๋ฒํผ ํด๋ฆญ
2) ์์ ํ์ด์ง์์ ๊ธ ์์ (์์ ๋์ ํ์ด์ง์ ๋ด์ฉ์ด ๊ธฐ์ ๋์ด์์)
3) ์์ ์๋ฃ ๋ฒํผ ๋๋ฅด๋ฉด DB์ ๋ฐ์ดํฐ ์ ์ก ํ ์์ ์๋ฃ
์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์ณ ๊ตฌํ์ ํด๋ณด์!
1. ์์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
1) ์์ ํ์ด์ง
(1) ์๋ฒํ์ผ ์ธํ
์์ ํ์ด์ง์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด ์์ ๋์์ธ ๋ฐ์ดํฐ๊ฐ ๊ธฐ์ ๋์ด์๋ค.
//server.js
app.get('/edit/:num', async(request, response) => {
try {
let result = await db.collection('post').findOne({_id : new ObjectId(request.params.num)})
response.render('edit.ejs', {result:result});
} catch (err) {
response.send("์ค๋ฅ!")
}
})
์ด๋ฅผ ์ํด์ /edit์ ์์path๋ก URLํ๋ผ๋ฏธํฐ num์ ๋ฑ๋กํ๊ณ
num์ผ๋ก ๋ฐ์ id๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ๋ฅผ DB์์ ๊ฐ์ ธ์์ค๋ค.
findOne() ํจ์์ request.params.num์ value๋ก ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ์ ์กํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ๋ฐ๊ณ
try, catch๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ ์์ ์ฑ์ ๋์ธ๋ค!
์ดํ edit.ejs ํ์ผ๋ก ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ด์ค๋ค.
(2) ์์ ๋ฒํผ & EJS ํ์ผ ์์ฑ
๊ฐ ๊ธ์ detail ํ์ด์ง์ ์์ ๋ฒํผ์ ์์ฑํด์ค๋ค.
์์
//detail.ejs
...
<a class="edit-btn" href="/edit/<%= result._id %>">์์ </a>
<% result._id %>๋ฅผ URLํ๋ผ๋ฏธํฐ์ ์ ์กํด์ฃผ๋ ๋ฒํผ์ ์ ์ํด์ฃผ์๋ค.
๊ธ ์์ ๊ธฐ๋ฅ์ ๊ธ ์ฐ๊ธฐ ๊ธฐ๋ฅ๊ณผ ๋งค์ฐ ์ ์ฌํ๊ธฐ ๋๋ฌธ์ write.ejs ํ ํ๋ฆฟ์ ํ์ฉํด ๋ง๋ค์ด์ค๋ค.
//edit.ejs
...
<form action="/editpost/<%=result._id%>" method="POST">
<textarea name="title"><%=result.title%></textarea>
<textarea name="content"><%=result.content%></textarea>
</form>
์์ฒ๋ผ db์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉํด์ค๋ค.
๋ํ ๊ธ์ ์์ ํด๋ฌ๋ผ๋ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด์ form ํ๊ทธ์ action ์์ฑ์
/editpost/๊ธid ๋ฅผ ๋ฃ์ด์ฃผ์๋๋ฐ ์ด์ ๋ํ ์๋ฒํ์ผ ์์ ์ ์งํํด๋ณด์.
โป <form> ํ๊ทธ์์๋ GET, POST ์์ฒญ๋ง ๊ฐ๋ฅํจ.. method-override ๋ฑ์ ํ์ฉํ๋ฉด ๊ฐ๋ฅ!
(3) ๊ธ ์์ ๊ธฐ๋ฅ ๊ตฌํ
updateOne({๋ฐ์ดํฐ ์ ๋ณด}, {$set : {์์ ๋ ๋ฐ์ดํฐ} })
๊ธ์ ์์ ํ๊ธฐ ์ํด์๋ updateOne ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
//server.js
app.post('/editpost/:num', async(request, response)=>{
try{
await db.collection('post').updateOne({_id : new ObjectId(request.params.num)},
{$set: {title:request.body.title, content:request.body.content}})
response.redirect(`/detail/${request.params.num}`);
}
catch(err){
response.send("์ค๋ฅ!")
}
})
/editpost์ ํ์๋ก ๋ค์ด์จ URLํ๋ผ๋ฏธํฐ num์ ๋ค์ด์๋ ๊ธid๋ฅผ
updateOne({๋ฐ์ดํฐ ์ ๋ณด}, {$set : {์์ ๋ ๋ฐ์ดํฐ}}) ํํ์ ์ ์ฉํด์ฃผ๋ฉด ์์ ๊ฐ๋ค.
ํจ์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ ์ ๋ณด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ ๋๋ฒ์งธ ์ธ์์ ์ ๋ณด๋ก ๋ฎ์ด์์์ค๋ค.
์ดํ ํด๋น ๊ธ์ ์์ ์ฌํญ์ ํ์ธํ๊ธฐ ์ํด์ ์์ธํ์ด์ง๋ก redirectํด์ฃผ์๋ค!
(4) ์์ ํ ๊ธฐ๋ฅ ๊ตฌํ์ํ ์์ธ์ฒ๋ฆฌ
//server.js
app.post('/editpost/:num', async(request, response)=>{
try{
if(request.body.title == ""){
response.send("์ ๋ชฉ์ ์
๋ ฅํด์ฃผ์ธ์");
}
else if(request.body.title.length > 30){
response.send("์ ๋ชฉ์ 30์ ์ด๋ด๋ก ์
๋ ฅํด์ฃผ์ธ์.");
}
await db.collection('post').updateOne({_id : new ObjectId(request.params.num)},
{$set: {title:request.body.title, content:request.body.content}})
response.redirect(`/detail/${request.params.num}`);
}
catch(err){
response.status(500).send("DB์๋ฌ");
}
})
์ ๋ชฉ์ ์ ๋ ฅํ์ง ์๊ฑฐ๋ 30์ ์ด๊ณผ์ธ ๊ฒฝ์ฐ๋ฅผ ์ถ๊ฐ๋ก ์์ธ์ฒ๋ฆฌ ํด์ฃผ์๋ค!
'๐ | WEB DEV > NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS+Express] 13. formํ๊ทธ์์ PUT, DELETE ์์ฒญํ๊ธฐ & MongoDB ์์ ๋ฌธ๋ฒ + (0) | 2023.10.15 |
---|---|
[NodeJS+Express] 11. URLํ๋ผ๋ฏธํฐ (์์ธํ์ด์ง ๋ง๋ค๊ธฐ) (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 |
๋๊ธ