19

JSON構造をノード/エクスプレスサーバーに送信し、オブジェクトをデータベースに保存しています。問題は、整数とブール値を使用してJSONを送信しますが、すべてが文字列として保存されることです。

これが私のノード/エクスプレスコードです:

var express = require('express');

var app = express();
app.enable("jsonp callback");
app.use(express.bodyParser());

// allow cross origin scripting to get data from devices directly
app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

app.post('/departures', function(req, res) {

/* I started using this to convert back to integers - but need to solve the problem
    for (var i in req.body.data) {
      req.body.data[i].siteid = parseInt(req.body.data[i].siteid);
    }
*/
    console.log('saving data '+JSON.stringify(req.body.data));
    positionProvider.save(req.body.data, function(){
      res.json({status:'success'});
    })
});

これが私がjqueryでPOSTしている方法です:

    var data = [{"siteid":123}];

    $.ajax({
        type: 'POST',
        url: serverUrl + '/departures',
        data: {
            data: data
        },
        success: function(resp) {
            alert('saved departure data '+JSON.stringify(data))
        },
        error: function(err) {
            console.log('error posting to server...');
            console.log(err);
        }
    });

jquery側は{"siteid":123}を送信したと報告しますが、ノード側は{"siteid":"123"}を受信したと報告します。

整数はどこで文字列に変換されますか?

4

2 に答える 2

13

データは、クライアントからサーバーに送信された結果として文字列に変換されます。クライアントとサーバーは実際には JSON で通信しているのではなく、テキスト データまたはバイナリ データで通信していることに注意してください。content-type: application/jsonサーバー (Express?) は送信されたデータを文字列として暗黙的に解釈し、リクエスト ヘッダーを含めると JSON に変換されます。データを特定の形式で保持する場合は、サーバーで明示的にタイプ check および convert する必要があります。

TLDR (コメント); クライアントが有効なデータを送信することに依存しないでください。データベースに保存する前にクリーニングしてください。

于 2013-03-18T16:17:16.683 に答える