๐๏ธ ์ํฉ
ํ๋ก์ ํธ๋ฅผ ์งํํ ๋์ ejs๋ฅผ ํ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ ์ฑ๊ณตํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฒํผ์ ํด๋ฆญํ์๋, ํ๋์ค๋ก ๊ฐ์ ์ ๋ฌํ๋ฉด์ router๋ฅผ ๋์์ํค๋ ๋ฐ์๋ ์ฑ๊ณตํ๋ค.
๊ทผ๋ฐ ๋ฌธ์ ๋ post๋ get ์์ฒญ์ด ์๋ ์ด์ธ์ ์์ฒญ์ด์๋ค.
๊ทธ๋ถ๋ถ์ ๋ํด ์ฐพ์๋ณด์๋ค.
๐ท ejs ๋ก delete ์์ฒญ , put , patch ์์ฒญํ๊ธฐ.
form ํ๊ทธ๋ก ์ ์กํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ,
๋ฌธ์ ๋ formํ๊ทธ๋ put ์์ฒญ์ด๋ patch ์์ฒญ, delete ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์๋ค.
์๋ฌด๋ฆฌ ์ ์ด๋ ๊ณ์ ์๋ํ์ง ์์์ ๋นํฉํ๋๋ฐ, ์๋ ์ฒ๋ฆฌํ ์ ์๋๊ฑธ ์ ๊ณ ์์๋ ๊ฒ.!!
์ด์๋ํ ๋ฐฉ๋ฒ์ ์ฐพ๋ค๋ณด๋ ๊ผผ์๋ฅผ ๋ฐ๊ฒฌํ๋ค.
<form action="/api/user/<%= userId %>" method="POST">
<input type = 'hidden' name="_method" value="DELETE" onclick="location.href = '/api/user/<%=userId%>'">์์์ฉ_ํ์ ํํดํ๊ธฐ<button>d</button></input>
</form>
form ํ๊ทธ์๋ post๋ก ์์ฒญ์ ๋ณด๋ด์ฃผ๊ณ ,
๊ทธ ์์ inputํ๊ทธ๋ฅผ ์ฃผ์ด์, ํด๋น ํ๊ทธ์ ์์ฑ์ ์์ ๊ฐ์ด ์ ๊ณ value์๋ ์ค์ ๋ก ์์ฒญํ๋ ค ํ๋ ๋ฉ์๋๋ฅผ ์ ์ด์ฃผ๋ฉด, ๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ๋จ์ ์ router์์ delete ๋ฉ์๋๊ฐ ์๋๋ผ post ๋ฉ์๋๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค.
๊ทธ๋ฌ๋ค ๋ณด๋ ์ฃผ์๊ฐ์ด ๊ฒน์น ์ฐ๋ ค๊ฐ ์๋ค.
๊ทธ๋ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๋๋ฏ ํ๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฐ ๋ฐฉ๋ฒ๋ ์์๋ค.
npm i method-override
์ด node.js ๋ชจ๋์ ์ค์นํ๋ฉด router์ ์์ฒญ์ post ๋ก ๋ฐ๊พธ๊ณ , ์ฃผ์๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ ํ์ง ์์๋ ๋๋ค.
์๋๋ ํด๋น ๋ชจ๋์ ๊นํ๋ธ ์ฌ์ดํธ์์ ๊ฐ์ ธ์จ ๋ด์ฉ์ด๋ค
์ฟผ๋ฆฌ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ฌ์ ์
์ฟผ๋ฆฌ ๋ฌธ์์ด ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ค๋ฉด ์ฟผ๋ฆฌ ๋ฌธ์์ด ํค๋ฅผ ํจ์์ ๋ํ ๋ฌธ์์ด ์ธ์๋ก ์ง์ ํฉ๋๋ค methodOverride. ๊ทธ๋ฐ ๋ค์ ํธ์ถํ๋ ค๋ฉด POST์ฌ์ ์๋ ๋ฉ์๋๋ฅผ ํด๋น ์ฟผ๋ฆฌ ๋ฌธ์์ด ํค ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ URL์ ์์ฒญ์ ๋ณด๋ ๋๋ค. <form>์ฟผ๋ฆฌ ๊ฐ์ ์ฌ์ฉํ๋ ์ด ๋ฐฉ๋ฒ ์ ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๋ ค๊ณ ํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ฐ HTML ์์์ ํจ๊ป ์ฌ์ฉ๋์ง๋ง ์ฌ์ ํ ์ต์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
var express = require('express')
var methodOverride = require('method-override')
var app = express()
// override with POST having ?_method=DELETE
app.use(methodOverride('_method'))
HTML์ ์ฌ์ฉํ ์ฟผ๋ฆฌ ์ฌ์ ์ ํธ์ถ ์์ <form>:
<form method="POST" action="/resource?_method=DELETE">
<button type="submit">Delete resource</button>
</form>
action์ ์ฃผ์๊ฐ์ ์ ๊ณ , ๊ทธ ์ดํ๋ก ?_method=์ํ๋์์ฒญ ์ ์ ์ด์ฃผ๋ฉด ํด๊ฒฐ๋๊ธฐ์
์คํ๋ ค ๊ฐ๋จํ๋ค.
๐ซ ๋๋์
ejs๋ก ๋ฐฑ๊ณผ ํ๋ก ํธ๋ฅผ ์ฐ๊ฒฐํ๋๊ฒ ์ฒ์์ด๋ผ ์ด๋ ค์ ์ง๋ง,
์ด๋ฒ์ ๊ฒฝํํด ๋ดค์ผ๋ ๋ค์์ ์ข๋ ์ ํ ์ ์์ ๊ฒ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ejs์ delete ์์ฒญ ๊ณผ ๊ฐ์ ๋ถ๋ถ์ ์ข ๋ถํธํ๋ค๊ณ ๋๊ปด์ก์๋๋ฐ,
ํด๋น ๋ชจ๋์ ์ค์นํด์ ์ฌ์ฉํ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค.
๋ค๋ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ก ํธ์ ๋ฐฑ์ ์ฐ๊ฒฐํ๋ ๊ฑด ์์ง ํด๋ณด์ง ์์์
๋์ค์ ํ๋ฒ ๊ฒฝํํด ๋ณด๊ณ ์ถ๋ค.
์ฐธ๊ณ ํ ์ฌ์ดํธ
https://github.com/expressjs/method-override
https://victorydntmd.tistory.com/29