【Node.js】Express4.13.1でHTTPのPUT,DELETEメソッドを処理する
概要
- HTMLのformにinput type="hidden"でname=“_method”, value=“put(delete)”を指定する
- method-overrideとbody-parserをインストールしておく
- method-overrideをapp.useする時に一工夫する
手順
formにhidden属性のinputを加える(index.ejs)
<form class="" action="/posts/<%= i %>" method="post"> <input type="submit" name="name" value="delete"> <input type="hidden" name="_method" value="delete"> <input type="hidden" name="_csrf" value="<%= csrftoken %>"> </form>
app.js
var methodOverride = require('method-override’); var bodyParser = require('body-parser’); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(methodOverride((req, res) => { if (req.body && typeof req.body === 'object' && '_method' in req.body) { // look in urlencoded POST bodies and delete it var method = req.body._method delete req.body._method return method } })); app.delete('/posts/:id', post.destroy);
値を受け取るとき(post.js)
exports.destroy = (req, res) => { posts.splice(req.body.id, 1); };
参考
javascript - Node.js - Express 4.x - method-override not handling PUT request - Stack Overflow