web-dev-qa-db-ja.com

Node.js / Express form post req.bodyが機能しない

Expressを使用していますが、bodyParserからフォームデータを取得できません。私が何をしても、それは常に空のオブジェクトとして現れます。以下は、Expressで生成されたapp.jsコードです(追加したのは、一番下のapp.postルートだけです)。

var express = require('express');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
    app.use(express.errorHandler()); 
});

// Routes

app.get('/', function(req, res){
    res.sendfile('./public/index.html');
});

app.post('/', function(req, res){
    console.log(req.body);
    res.sendfile('./public/index.html');
});

app.listen(3010);

ここに私のHTMLフォームがあります:

<!doctype html>
<html>
  <body>
<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>
  </body>
</html>

フォームを送信すると、req.bodyは空のオブジェクトです{}

これは、フォームタグからenctype属性を削除しても発生することに注意してください。

...私が見逃している/間違っていることはありますか?

ノードv0.4.11とExpress v2.4.6を使用しています

28
binarymax
<form id="myform" action="/" method="post" enctype="application/x-www-form-urlencoded">
  <input type="text" name="I_appear_in_req_body" id="mytext" />
  <input type="submit" id="mysubmit" />
</form>

HTTPポストの本文は、name属性を持つすべてのフォームコントロールのキー/値ハッシュであり、値はコントロールの値です。

すべての入力に名前を付ける必要があります。

36
Raynos

また、コンテンツタイプが原因です。 console.log(req)オブジェクトを参照してください。

'content-type': 'application/json; charset=UTF-8’  // valid.

'content-type': 'application/JSON; charset=UTF-8’  // invalid & req.body would empty object {}.

Console.log(req.is( 'json'))でコンテンツタイプを確認するには// true/falseを返す

上記では「charset = UTF-8」は無視できると思います。

3
Bhaveshkumar