๋ชฉ์ฐจ
์ด๋ฒ์๋ ๊ธ ์์ฑ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์!
0. ์์ํ๊ธฐ์ ..
๋จผ์ ๊ธ ์์ฑ๊ธฐ๋ฅ์ ๋ง๋๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
ํด๋ผ์ด์ธํธ๊ฐ ์์ฑํ ๊ธ์ ์๋ฒ์ post ์์ฒญ์ ํ๋ฉด
์๋ฒ๋ ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅธ ํ์์ธ์ง ํ์ธ์ ํ ํ,
์ด์์ด ์๋ค๋ฉด DB์ ๋ฑ๋ก์ ํ ์ ์๋๋ก ํด์ฃผ์ด์ผํ ๊ฒ์ด๋ค.
(์ ์ ๊ฐ ์ง์ DB๋ฅผ ๊ฑด๋๋ฆฌ๋๋ก ํด์๋ ์๋ ๊ฒ์ด๋ค..)
1. ๊ธ ์์ฑ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
1) ํ์ผ ์์ฑ
๊ธ์ ์์ฑํ form์ ๋ด์ ํ์ผ์ ํ๋ ์์ฑํ ๋ค ์๋ฒ์ ๋ฑ๋กํด์ค๋ค.
//write.ejs
...
<form>
<textarea></textarea>
<textarea></textarea>
<button></button>
</form>
//server.ejs
app.get('/write', (request, response) => {
response.render('write.ejs');
})
2) ํ์ผ ์ค์
๊ธ์ ์์ฑํด์ ๋ณด๋ด๊ธฐ ์ํ ์ค์ ์ ํด์ฃผ์ด์ผํ๋ค.
(1) EJSํ์ผ
//write.ejs
...
<form actoin="/addpost" method="POST">
<textarea name="title"></textarea>
<textarea name="content"></textarea>
<button type="submit"></button>
</form>
form ํ๊ทธ : action๊ณผ method ์์ฑ์ ์ฝ์ ํด์ค๋ค.
- method๋ DB์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๊ฒ์ด๋ฏ๋ก POST๋ก ์ค์ ํ๋ค.
- action์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ url์ ์ค์ ํ๋ค. (์๋ฒํ์ผ์ ๋์ผํ๊ฒ ์์ฑํ ์์ )
textarea, input ๋ฑ ๋ฐ์ดํฐ ์ ๋ ฅ ํ๊ทธ : name ์์ฑ์ ์ฝ์ ํด์ค ํ ์์๋ก ์ด๋ฆ์ ์์ฑํด์ค๋ค.
button ํ๊ทธ : type ์์ฑ์ submit์ผ๋ก ์ค์ ํ๋ฉด form์ ์ค์ ํ ๋ด์ฉ์ ์ ์ถํ๋๋ก ์ค์ ํ๋ค.
(2) ์๋ฒ ํ์ผ
//server.js
app.post('/addpost', (request, response)=>{
console.log(request.body);
})
์์ฒ๋ผ app.post()๋ฅผ ํตํด form์์ ์์ฑํ url์ ๋ฑ๋กํ๋ค.
์ด๋ request.body์ ํตํด post ์์ฒญ์ ์ฒจ๋ถํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋๋ฐ
์ฝ์์ฐฝ์์ ๋จผ์ ํ์ธํด๋ณด์.
๊ทธ ์ ์ ์ด๋ฅผ ์ํด์ ํ๊ฐ์ง ์ค์ ์ด ํ์ํ๋ค!
//server.js
app.use(express.json())
app.use(express.urlencoded({extended:true}))
์ ์ฝ๋๋ฅผ ์๋ฒํ์ผ ์๋จ์ ์์ฑํด์ค๋ค.
์ด์ ๊ธ์ ์์ฑํ ํ ์ ์ถ ๋ฒํผ์ ํด๋ฆญํด๋ณด๋ฉด
์์ฑํ ๋ด์ฉ๋ค์ด {name:์์ฑ๋ด์ฉ, ... }์ ํ์์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
3) ๊ธ ๋ฑ๋กํ๊ธฐ
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ธ์ ๋ฑ๋กํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ DB๋ฅผ ์ดํด๋ณด์.
์ด ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ MongoDB๋ฅผ ์ดํด๋ณด๋ฉด
forum ์ด๋ผ๋ DB๋ช ์ post ๋ผ๋ collection๋ช ์ ์ด์ ํฌ์คํธ์์ ์ค์ ํด๋์๋ค.
๋ํ ํ ์คํธ๋ก ๋ฃ์๋ ๋ฐ์ดํฐ๋ธ๋ก๋ title, content๋ผ๋ key๋ฅผ ๊ฐ์ง ํํ์ด๋ค.
์ด๋ฅผ ๊ทธ๋๋ก ์ด์ฉํด๋ณด์.
//server.js
let db;
const url = 'MongoDB URL'
new MongoClient(url).connect().then((client)=>{
console.log("DB connected");
db = client.db('forum') //์ค์ ํ db ์ด๋ฆ
app.listen(8080, () => {
console.log('http://localhost:8080 ์์ ์๋ฒ ์คํ์ค!')
})
}).catch((err)=>{
console.error(err);
})
...
app.post('/newpost', async(request, response)=>{
await db.collection('post').insertOne({title:request.body.name, content:request.body.content});
response.redirect('/list')
})
์์์ ํ์ธํ๋ requset.body๋ก๋ถํฐ ๊ฐ์ ๊ฐ์ ธ์์ ์ ๋ฌํด์ฃผ์๋ค.
DB์ ๊ฐ์ ์ ๋ฌํด๋์๋ ์ญ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ์ฌ async await๋ฅผ ์ฌ์ฉํด์ค๋ค.
์ดํ, ์๋ฒ ํ์ผ ๋ด์ ์ ์ ๋์๋ db ๋ณ์์ .collection('collection๋ช ')์ insertOne()ํจ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค.
๋ํ response.redirect('path๋ช ')์ ํตํด ๋ฐ์ดํฐ ์ ์ฅ ํ url ์ ์์ ํ ์ ์๋ค.
์ด์ form์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํํ submit ๋ฒํผ์ ๋๋ฅด๋ฉด
์๋์ ๊ฐ์ด DB์ ์ ์ ๋ฌ๋ ๊ฒ์ ์ ์ ์๋ค.
4) ๊ธ ๋ฑ๋ก ์ ์๋ฒ ๊ฒ์ฆ๋จ๊ณ ์ถ๊ฐํ๊ธฐ
๊ธ ์์์ ๋ค๋ฃจ์๋
1. ํด๋ผ์ด์ธํธ์post ์์ฒญ / 2. ์๋ฒ๋ ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅธ ํ์์ธ์ง ํ์ธ / 3. ์ด์์ด ์๋ค๋ฉด DB์ ๋ฑ๋ก
์ด ์ค 2๋ฒ, ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฒ์ฆ์ ํ๋ ๊ณผ์ ์ ๊ตฌํํด๋ณด์.
[๊ตฌํํ ๊ฒ์ฆ ๋ด์ฉ]
1. ์ ๋ชฉ์ด ๋น์ด์๋ ๊ฒฝ์ฐ
2. ์ ๋ชฉ 30์ ์ด๋ด
//server.js
app.post('/newpost', async(request, response)=>{
try{
if(request.body.title == ""){
response.send("์ ๋ชฉ์ ์
๋ ฅํด์ฃผ์ธ์");
}
else if(request.body.title.length > 30){
response.send("์ ๋ชฉ์ 30์ ์ด๋ด๋ก ์
๋ ฅํด์ฃผ์ธ์.");
}
else{
await db.collection('post').insertOne({title:request.body.title, content:request.body.content});
response.redirect('/list');
}
}catch(err){
console.log(err);
response.send("DB์ค๋ฅ");
//500์ฝ๋๋ฅผ ๋ฐํํ๊ธฐ๋๋ฌธ์->response.status(500).send("DB์๋ฌ");
}
})
- try, catch : DB์ ์ฐ๊ฒฐ์ด ๋์ง ์๊ฑฐ๋, _id๊ฐ ๋๊ฐ์์ ์ ์ฅ์ด ๋ถ๊ฐํ๋ ๋ฑ์ ์๋ฌ์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ค ์ ์๋ค.
- if else ์ ์ด๋ฌธ : ์กฐ๊ฑด๋ฌธ์ ํตํด ์ ์ ์๊ฒ ์ค๋ฅ ๋ด์ฉ์ ๋ช ์ํด์ฃผ์๋ค!
[์์ฝ]
- <form>ํ๊ทธ๋ก post ์์ฒญ
- request.body์ post ์์ฒญํ ๋ด์ฉ ๋ค์ด์์
- try, catch, ์กฐ๊ฑด๋ฌธ ๋ฑ ํ์ฉํ์ฌ ์๋ฒ์์ ๋ฐ์ดํฐ ๊ฒ์ฆ
- .insertOne() ์ผ๋ก ๋ฐ์ดํฐ DB์ ์ฝ์
'๐ | WEB DEV > NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS+Express] 12. ๊ธ ์์ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2023.10.15 |
---|---|
[NodeJS+Express] 11. URLํ๋ผ๋ฏธํฐ (์์ธํ์ด์ง ๋ง๋ค๊ธฐ) (0) | 2023.10.15 |
[NodeJS+Express] 9. RESTful API๋? (1) | 2023.10.11 |
[NodeJS+Express] 8. EJS ๋ฌธ๋ฒ ์ ๋ฆฌ (0) | 2023.10.09 |
[NodeJS+Express] 7. EJS ํ์ผ ๋ด JS๋ฌธ๋ฒ ์ฌ์ฉ & ํ์ผ ๋ด .ejsํ์ผ ์ฝ์ (0) | 2023.10.09 |
๋๊ธ