728x90
λ°μν
π‘ μ€μ΅ ν¬μΈνΈ!
- κΈ μμ νμ΄μ§ HTML νμΌμ λ§λ€μ΄μ, ν μΌ λ¦¬μ€νΈμμ μμ λ²νΌμ ν΄λ¦νλ©΄ ν΄λΉ κ²μκΈμ κΈ μμ νμ΄μ§λ‘ μ°κ²°λλλ‘ νλ€.
- μ°κ²°λ κΈ μμ νμ΄μ§μμλ ν΄λΉνλ κ²μλ¬Όμ λ°μ΄ν°λ₯Ό DB μμ λ°μμ input μ λ΄μ©μΌλ‘ 보μ¬μ€ μ μκ² νλ€.
- κΈ μμ νμ΄μ§μμ λ΄μ©μ μμ ν ν Submit λ²νΌμ λλ₯΄λ©΄ DB μ ν΄λΉ κ²μλ¬Ό λ°μ΄ν°μ λ΄μ©μ΄ μμ λκ³ , λΈλΌμ°μ μμλ κΈ μμ νμ΄μ§μμ ν μΌ λ¦¬μ€νΈ νμ΄μ§λ‘ λμ΄κ°λλ‘ νλ€.
π κΈ μμ νμ΄μ§(HTML) λ§λ€κΈ°
<h4 class="container mt-5">
<strong>κΈ μμ νκΈ°</strong>
<p class="mt-3" style="font-size: 14px;">κΈλ²νΈ : <%= edit._id %></p>
</h4>
<div class="container mt-4">
<form action="/edit?_method=PUT" method="POST">
<div class="form-group my-4">
<label class="mb-2">ν μΌ</label>
<input type="text" name="id" style="display: none;" value="<%= edit._id %>">
<input type="text" class="form-control" name="content" value="<%= edit.ν μΌ %>">
</div>
<div class="form-group my-4">
<label class="mb-2">λ§κ°μΌ</label>
<input type="text" class="form-control" name="date" value="<%= edit.λ§κ°μΌ %>">
</div>
<button type="submit" class="btn btn-danger fw-bold">Submit</button>
</form>
</div>
- μμ κΈ°λ₯μ ꡬνν μ μλ λ°©λ²μ λ€μνμ§λ§, κ°μ₯ μ¬μ΄ λ°©λ²μ΄ μμ νμ΄μ§λ₯Ό λ°λ‘ λ§λλ κ²!
- λ°λΌμ, edit.ejs λΌλ κΈ μμ νμ΄μ§μ ν΄λΉνλ EJS νμΌμ λ°λ‘ λ§λ€μλ€.
- μ λ°μ μΈ κ΅¬μ‘°λ κΈμ°κΈ° νμ΄μ§μ λμΌνκ² νλ, input νκ·Έμ value μμ±μ λ£κ³ EJS λ¬Έλ²μ μ¬μ©νμ¬ λ―Έλ¦¬ ν΄λΉ κ²μλ¬Όμ λ°μ΄ν°λ₯Ό λ£μ΄μ 보μ¬μ€ μ μλλ‘ ν΄μ£Όμλ€.
(μλμ JavaScript μ½λλ₯Ό 보면 μκ² μ§λ§ ν΄λΉ λ°μ΄ν°λ edit μ΄λΌλ λ³μμ λ΄μμ λ°μμ¨λ€.) - μ΄μ edit.ejs μμ Submit λ²νΌμ ν΄λ¦νλ©΄ μμ μμ²μ ν΄λΉνλ PUT μμ²μ ν΄μ£Όμ΄μΌ νλλ°, form νκ·Έ λ΄μμλ POST, GET λ κ°μ§ λ°©μλ§ μ§μνλ€.
- λ°λΌμ, DELETE μμ² λμ²λΌ AJAX λ₯Ό νμ©νλ μ§, method-override λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ λλ€.
(method-override λΌμ΄λΈλ¬λ¦¬ μ€μΉλ°©λ²μ μλμ κΈ°μ¬) - λΌμ΄λΈλ¬λ¦¬ μ€μΉ νμλ form νκ·Έμ μμ μ΄ νμνλ€.
- action μμ±μ /edit?method=PUT μΌλ‘ λ°κΎΈμ΄μ£Όλ©΄ /edit κ²½λ‘λ‘ PUT μμ²μ΄ κ°λ₯ν΄μ§λ€.
- method λΆλΆμ μ΄μ°¨νΌ GET, POST λ κ°μ§ λ°©μλ§ μ§μνκ³ μμ νλ κΈ°λ₯μ POST μ κ°κΉμ°λ―λ‘ POST λ‘ μμ±ν΄μ£Όμλ€.
π€ method-override λΌμ΄λΈλ¬λ¦¬ μ€μΉνκΈ°
- ν°λ―Έλμ npm install method-override μ λ ₯νμ¬ method-override λΌμ΄λΈλ¬λ¦¬ μ€μΉνκΈ°
- JavaScript νμΌ μλ¨μ μλμ μ½λ μΆκ°νκΈ°
const methodeOverride = require('method-override');
app.use(methodeOverride('_method'));
π GET μμ² JavaScript μ½λ μ§κΈ°
// λκ΅°κ°κ° μμ λ²νΌμ ν΄λ¦νμ¬ /edit/:id λ‘ GET μμ²μ νλ©΄
app.get('/edit/:id', function(req, res){
// DB μμ κ²μκΈ λΆλ¬μ€κΈ°
req.params.id = parseInt(req.params.id);
db.collection('post').findOne({_id : req.params.id}, function(err, result){
res.render('edit.ejs', {edit : result});
})
})
- μ°μ κ²½λ‘λ₯Ό /edit/:id λ‘ μ€μ ν΄μ λκ΅°κ°κ° /edit/ λ€μ κ²μλ¬Όμ _id λ₯Ό μ μ΄μ GET μμ²μ νλ©΄ ν΄λΉνλ κ²μλ¬Όμ edit.ejs νμ΄μ§λ₯Ό λ³Ό μ μκ²λ ν΄μ£Όμλ€.
- μ΄μ μ λΈλ‘κ·Έ κ²μκΈμμ μμ±ν μ½λμ μ€λͺ κ³Ό κ±°μ μ μ¬ν΄μ λ μ΄μμ μ€λͺ μ μλ΅νλ€.
π PUT μμ² JavaScript μ½λ μ§κΈ°
// λκ΅°κ°κ° νΌμμ /edit μΌλ‘ PUT μμ²μ νλ©΄
app.put('/edit', function(req, res){
// νΌμ κΈ°μ¬λ λ°μ΄ν°λ₯Ό db.collection μ μ
λ°μ΄νΈνκΈ°
req.body.id = parseInt(req.body.id);
db.collection('post').updateOne({_id : req.body.id}, {$set : {ν μΌ: req.body.content, λ§κ°μΌ : req.body.date}}, function(){
console.log('κ²μλ¬Ό μμ μλ£');
res.redirect('/list')
})
})
- DB μ λ°μ΄ν°λ₯Ό μμ νλ €λ©΄ .updateOne() ν¨μλ₯Ό μ¬μ©νλ€.
- .updateOne() ν¨μλ 3κ°μ νλΌλ―Έν°λ₯Ό νμλ‘ νλ€.
- μ λ°μ΄νΈν κ²μλ¬Ό : μ¬κΈ°μλ κΈ°μ‘΄ κ²μλ¬Όμ _id λ₯Ό μμ±
- μμ ν λ΄μ©: κΈ°μ‘΄ κ°μ μμ ν κ²μ΄λ―λ‘ $set μ΄λΌλ operator λ₯Ό μ¬μ©
- μ½λ°± ν¨μ : μ λ°μ΄νΈκ° μλ£λλ©΄ μ€νν μ½λλ₯Ό μμ±
- 첫λ²μ§Έ νλΌλ―Έν°μλ κΈ°μ‘΄ κ²μλ¬Όμ _id κ° λ€μ΄κ°μΌ νλ―λ‘, κ²μλ¬Ό μμ μμ²ν λ _id λ₯Ό κ°μ΄ λ³΄λΌ μ μλλ‘ HTML νμΌμ μμ ν΄μ€λ€.
- κΈ μμ νμ΄μ§μμ Submit λ²νΌμ λλ₯΄λ©΄ λͺ¨λ input λ€μ value κ° μ μ‘λλ€λ μ μ μ΄μ©νμ¬, κ²μλ¬Όμ _id λ input μ λ΄μ μλ²λ‘ μ μ‘ν΄μ€λ€.
- λ¨, μ΄ input μ μ¬μ©μλ₯Ό μν λΆλΆμ΄ μλλ―λ‘ display : none μ²λ¦¬λ₯Ό νμ¬ μ¨κ²¨μ£Όμλ€.
- μ΄μ Submit λ²νΌμ ν΅ν΄ form μ μ μ‘ν λ, μ΄ 3κ°μ§ λ°μ΄ν°(id, content, date) κ° μ μ‘λλ€.
<input type="text" name="id" style="display: none;" value="<%= edit._id %>">
- JavaScript νμΌμμλ μ μ‘λ°μ λ°μ΄ν°λ€(req.body μ λ΄κΈ΄ λ°μ΄ν°λ€)μ κ°μ§κ³ .updateOne() ν¨μλ₯Ό ꡬμ±ν΄μ£Όμ΄μΌ νλ€.
- λ¨, μ΄λμλ req.body.id λ μ«μμμλ λ¬Έμμ΄λ‘ λ°λμ΄μμ μ μμΌλ―λ‘ parseInt() ν¨μλ₯Ό ν΅ν΄ μ«μλ‘ λ³ννλ κ³Όμ μ΄ νμνλ€.
- λ§μ§λ§μΌλ‘, res.redirect('/list') μ½λλ₯Ό ν΅ν΄ μ λ°μ΄νΈκ° μλ£λμμΌλ©΄ ν μΌ λ¦¬μ€νΈ νμ΄μ§λ‘ κ°μ μ΄λμμΌμ€λ€.
728x90
λ°μν
'[κ°λ°] Practice > Node.js MongoDB' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Node.js / MongoDB] κ²μ κΈ°λ₯ λ§λ€κΈ° (1) | 2022.03.14 |
---|---|
[Node.js / MongoDB] νμμΈμ¦κΈ°λ₯ λ§λ€κΈ° (0) | 2022.03.14 |
[Node.js / MongoDB] μμΈ νμ΄μ§ λ§λ€κΈ° (0) | 2022.03.12 |
[Node.js / MongoDB] AJAX λ‘ μμ μμ²νκΈ° (0) | 2022.03.12 |
[Node.js / MongoDB] κ²μλ¬Όλ§λ€ λ²νΈ λ¬κΈ° (0) | 2022.03.11 |