2013-11-26 11 views
6

最近のバージョンのExpressでは、bodyParserミドルウェアの使用を中止することが推奨されています(デバッグメッセージを通じて伝えられます)。私はちょっと読んで、bodyParserはjsonurlencodedミドルウェアへのラッパーです - そして、そして、最新のExpress(3.4.4)は、bodyParserの代わりにこれらの2つを使います。右?bodyParserミドルウェアを使用せずに、ExpressでPOSTフィールドを取得する方法は?

しかし今、私は自分のフィールドに行くことができません。 req.bodyは未定義です。ここに私のJSフォームの提出コード(テキストフィールドのみ、ファイルなし)です。誰かが私にその値を得るために使用するreqのどのプロパティ/機能を教えてもらえますか?

var formData = new FormData($('#myForm')[0]); 
$.ajax({ 
    url: '/myurl', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: formData, 
    type: 'POST', 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.error('Error occured: ' + errorThrown); 
    } 
}); 
+0

[Busboy](https://github.com/mscdex/busboy)を代わりに使うことができます。 – adeneo

+1

私は 'bodyParser()'に対する警告を知らなかった。 'multipart()'のためのものがありましたが、非推奨になっています。したがって、他の2つを直接使用することができます: 'app.use(express.json()); app.use(express.urlencoded()); '。 –

+0

ありがとう@adeneo、しかし、別のリソースを含めずに値を取得する方法はありますか? –

答えて

13

問題がFormDataを送信するときに、Content-Typemultipart/form-dataになる、ということです。

あなたはexpress.json()express.urlencoded()を使用しているものの、それらのそれぞれが唯一Content-Typeの特定に作用する - それぞれapplication/jsonapplication/x-www-form-urlencoded、。

エクスプレス/コネクトでは、今後のセキュリティ上の理由から、multipart()の組み込みサポートとmultipart/form-dataコンテンツの解析が削除される予定です。彼らの代わりにrecommend using

だから、エクスプレス/接続と一般的にFormDatamulti-partの将来のサポートのために、あなた追加依存関係を使用する必要があります。

+0

Ajaxのpost contentTypeを 'application/json'に変更し、フィールドをstrigified jsonとして送信しました。乾杯! –

関連する問題