クライアントから Express を実行しているノード サーバーに JSON データを送信するときに問題が発生します。
問題を示す簡単なサーバーを次に示します。
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 ミドルウェアと関係があるのでしょうか?
ご協力いただければ幸いです!!
ベストアンサー1
$.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})}
)