web-dev-qa-db-ja.com

jQueryを使用して表現するためにjsonをPOSTする

JSONデータをクライアントからExpressを実行しているノードサーバーに送信するときに問題が発生します。

これが私の問題を示す単純なサーバーです。

_var express = require('express');

var app = express();

app.configure(function(){   
    app.use(express.bodyParser());
    app.use(app.router);
    app.use(express.logger());
});

app.listen(80);

app.post('/', function(req,res){
    console.log(req.body);
    console.log(req.body.number + 1);
});
_

このサーバーは、すべてのPOSTデータをコンソールに記録するだけです。

次に、以下をChromeの開発コンソールに貼り付けます:$.post('/', {number:1});

サーバーは次のように出力します。

_{ number: '1' }
11
_

渡した数値が文字列として解釈されないようにするにはどうすればよいですか?私が使用しているbodyParserミドルウェアと関係がありますか?

助けてくれてありがとう!!

23
Ed Hinchliffe

_$.post_は、URLエンコードされたデータを送信するため、実際に送信されるのは_number=1_であり、これはbodyParserミドルウェアによって解析されるのと同様に解析されます。

Jsonを送信するには、JSON.stringify({number:1})を使用する必要があります。

_$.post_を使用しても、残念ながら適切な_Content-Type_ヘッダーが設定されないため(Expressがそれを処理します)、次のように使用することをお勧めします。

_$.ajax({
    url: '/', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({number:1})}
)
_
40
soulcheck