ikemonn's blog

技術ネタをちょこちょこと

【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