web-dev-qa-db-ja.com

Express 4からFormDataを処理する方法

ノードサーバーにフォームデータを送信しようとしましたが、req.bodyノード側にフォームフィールドがありません

 var express = require('express')
var app = express()
var path = require('path')
var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({
  extended: true
}));

app.get('/', function (req, res) {
  res.sendFile('index.html')
})
app.post('/sendmail', function (req, res) {

  const formData = req.body.formData

これは私がブラウザから送信しているものです

fetch('/send', {
  method: 'POST',
  body: new FormData(form)
})

開発ツールでは、リファラーに渡されたデータしか表示されません。おそらくそれが私の問題です

リファラー: http:// localhost:3000 /?name =&budget =%C2%A310

31
SuperUberDuper

body-parserはマルチパートボディを処理しません。これはFormDataが送信されるものです。

代わりに、 multer のようなモジュールを使用してください。

たとえば、リクエストの(通常の)フィールドを取得するには:

const multer = require('multer');
const upload = multer();

app.post('/send', upload.none(), (req, res) => {
  const formData = req.body;
  console.log('form data', formData);
  res.sendStatus(200);
});
61
robertklep