๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/NodeJS

[NodeJS+Express] 13. formํƒœ๊ทธ์—์„œ PUT, DELETE ์š”์ฒญํ•˜๊ธฐ & MongoDB ์ˆ˜์ •๋ฌธ๋ฒ• +

by KASSID 2023. 10. 15.

form ํƒœ๊ทธ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด GET, POST ์š”์ฒญ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ PUT, DELETE ๋“ฑ์„ ํ™œ์šฉํ•˜๋ฉด ๋” ์ข‹์€ API์˜ ๊ธฐ์ค€์— ๋ถ€ํ•ฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!

 

1. method-override

method-override ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์„ค์น˜

npm install method-override

 

 

import

//server.js
const methodOverride = require('method-override')
app.use(methodOverride('_method'))

 

์„œ๋ฒ„ํŒŒ์ผ ์ตœ์ƒ๋‹จ์— ์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

1) form ํƒœ๊ทธ ์ˆ˜์ •

//edit.ejs
...
<form action="/editpost/<%=result._id%>?_method=PUT" method="POST">
  <textarea name="title"><%=result.title%></textarea>
  <textarea name="content"><%=result.content%></textarea>
</form>

?_method=PUT ์„ action์†์„ฑ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…ํ•ด์ฃผ๋ฉด

method ์†์„ฑ์ด PUT์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ „์†ก์ด ๋œ๋‹ค.

 

 

2) ์„œ๋ฒ„ํŒŒ์ผ ์ˆ˜์ •

app.put('/editpost/:num', async(request, response)=>{
  ...
})

์„œ๋ฒ„ํŒŒ์ผ๋„ put์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋!

 

 


2. MongoDB ์ˆ˜์ • ๋ฌธ๋ฒ• +

1) ํ•„๋“œ ์ˆ˜์ • ์—ฐ์‚ฐ์ž

์ด์ „์— ์ˆ˜์ •ํ•˜๊ธฐ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ updateOne() ํ•จ์ˆ˜์— $set ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค.

์ด๊ฒƒ์€ MongoDB์˜ ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์ž ์ค‘ ํ•„๋“œ ์ˆ˜์ • ์—ฐ์‚ฐ์ž์˜ ์ผ๋ถ€์ด๋‹ค.

$set์€ ๋ฎ์–ด์“ฐ๊ธฐ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ•„๋“œ์ˆ˜์ •์—ฐ์‚ฐ์ž๋“ค์ด ์กด์žฌํ•œ๋‹ค.

 

- $inc : ํ•„๋“œ ๊ฐ’ ์ฆ๊ฐ ๊ธฐ๋Šฅ (์–‘์ˆ˜: + , ์Œ์ˆ˜:-)

{$inc : {ํ•„๋“œ๋ช… : ์ˆซ์ž}}

์ „๋‹ฌํ•œ ํ•„๋“œ์˜ ๊ฐ’์„ ์ˆซ์ž๋งŒํผ ๊ฐ€๊ฐํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.

 

 

- $mul : ํ•„๋“œ ๊ฐ’ ๊ณฑํ•˜๊ธฐ ๊ธฐ๋Šฅ

{$mul : {ํ•„๋“œ๋ช… : ์ˆซ์ž}}

์ „๋‹ฌํ•œ ํ•„๋“œ์˜ ๊ฐ’์„ ์ˆซ์ž๋งŒํผ ๊ณฑํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.

 

- $unset : ํ•„๋“œ ์‚ญ์ œ ๊ธฐ๋Šฅ

{$unset : {ํ•„๋“œ๋ช…1 : '', ํ•„๋“œ๋ช…2 : ''}}

์ „๋‹ฌํ•œ ํ•„๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•๋ณด๋‹ค 0์„ ์ง‘์–ด ๋„ฃ๊ฑฐ๋‚˜ ๋นˆ ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‹ค๋ฃจ๊ธฐ ํŽธํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ!

 

 

2) ๋น„๊ต ์—ฐ์‚ฐ์ž

๋น„๊ต ์—ฐ์‚ฐ์ž๋„ ์กด์žฌํ•œ๋‹ค!

- $gt : ๋” ํฐ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง„ document ํ•„ํ„ฐ๋ง (>) 

{ํ•„๋“œ๋ช… : {$gt : ๊ฐ’}}

ํ•ด๋‹น ํ•„๋“œ๋ช…์˜ ๊ฐ’์ด ์ „๋‹ฌํ•œ ๊ฐ’๋ณด๋‹ค ๋” ํฐ document๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

- $gte: ์ด์ƒ์ธ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง„ document ํ•„ํ„ฐ๋ง (โ‰ฅ)

{ํ•„๋“œ๋ช… : {$gte : ๊ฐ’}}

ํ•ด๋‹น ํ•„๋“œ๋ช…์˜ ๊ฐ’์ด ์ „๋‹ฌํ•œ ๊ฐ’ ์ด์ƒ์ธ document๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

- $lt : ๋” ์ž‘์€ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง„ document ํ•„ํ„ฐ๋ง (<) 

{ํ•„๋“œ๋ช… : {$lt : ๊ฐ’}}

ํ•ด๋‹น ํ•„๋“œ๋ช…์˜ ๊ฐ’์ด ์ „๋‹ฌํ•œ ๊ฐ’๋ณด๋‹ค ๋” ์ž‘์€ document๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

- $lte: ์ดํ•˜์ธ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง„ document ํ•„ํ„ฐ๋ง (โ‰ค)

{ํ•„๋“œ๋ช… : {$lte : ๊ฐ’}}

ํ•ด๋‹น ํ•„๋“œ๋ช…์˜ ๊ฐ’์ด ์ „๋‹ฌํ•œ ๊ฐ’ ์ดํ•˜์ธ document๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

- $ne: ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์€ ํ•„๋“œ๊ฐ’์„ ๊ฐ€์ง„ document ํ•„ํ„ฐ๋ง (โ‰ )

{ํ•„๋“œ๋ช… : {$ne : ๊ฐ’}}

ํ•ด๋‹น ํ•„๋“œ๋ช…์˜ ๊ฐ’์ด ์ „๋‹ฌํ•œ ๊ฐ’๊ณผ ๋‹ค๋ฅธ document๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 

์ด ์™ธ์— ๋” ๋งŽ์€ ์—ฐ์‚ฐ์ž๋“ค์ด ์กด์žฌํ•œ๋‹ค!

(์ฐธ๊ณ  ์ œ๋กœ์ดˆ๋‹˜โœจ: https://www.zerocho.com/category/MongoDB)

 

 

3) ๋™์‹œ์— ์—ฌ๋Ÿฌ document(๋ฐ์ดํ„ฐ) ์ˆ˜์ •ํ•˜๊ธฐ

updateOne()์€ ํ•œ๊ฐœ์˜ document ๋งŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

์—ฌ๋Ÿฌ๊ฐœ์˜ ์ˆ˜์ •์„ ์›ํ•  ๋•Œ์—๋Š” updateMany()๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

- updateMany()

 

์‚ฌ์šฉ๋ฒ•

updateMany({๋ฐ์ดํ„ฐ ์ •๋ณด}, {์ˆ˜์ •์‚ฌํ•ญ}})

 

์‚ฌ์šฉ๋ฒ•์€ updateOne๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  document๋ฅผ ๋‘๋ฒˆ์งธ ์ธ์ž์— ๋Œ€ํ•œ ๋‚ด์šฉ์œผ๋กœ ์ˆ˜์ •ํ•œ๋‹ค.

 

์ด๋•Œ ๋ฐ์ดํ„ฐ ์ •๋ณด์—๋Š” ์œ„์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ ๋น„๊ต ์—ฐ์‚ฐ์ž ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

๋Œ“๊ธ€