web-dev-qa-db-ja.com

node.jsはリクエストのJSONを解析します

次のリクエストを含む資格情報JSONオブジェクトをnode.jsに送信しています。

credentials = new Object();
credentials.username = username;
credentials.password = password;

$.ajax({
    type: 'POST',
    url: 'door.validate',
    data: credentials,
    dataType: 'json',
    complete: function(validationResponse) {
        ...
    }
});

サーバー側では、送信された資格情報をJSONオブジェクトにロードして、さらに使用したいと思います。

ただし、reqオブジェクトからJSONを取得する方法がわかりません...

http.createServer(
    function (req, res) {
         // How do i acess the JSON
         // credentials object here?
    }
).listen(80);

(関数(req、res)にディスパッチャーがあり、さらにreqをコントローラーに渡すので、.on( 'data'、...)関数を使用したくありません)

7
ndrizza

サーバー側では、JSONではなくリクエストパラメーターとしてjQueryデータを受け取ります。 JSON形式でデータを送信する場合は、JSONを受信し、それを解析する必要があります。何かのようなもの:

_$.ajax({
    type: 'GET',
    url: 'door.validate',
    data: {
        jsonData: "{ \"foo\": \"bar\", \"foo2\": 3 }"
        // or jsonData: JSON.stringify(credentials)   (newest browsers only)
    },
    dataType: 'json',
    complete: function(validationResponse) {
        ...
    }
});
_

サーバー側では、次のことを行います。

_var url = require( "url" );
var queryString = require( "querystring" );

http.createServer(
    function (req, res) {

        // parses the request url
        var theUrl = url.parse( req.url );

        // gets the query part of the URL and parses it creating an object
        var queryObj = queryString.parse( theUrl.query );

        // queryObj will contain the data of the query as an object
        // and jsonData will be a property of it
        // so, using JSON.parse will parse the jsonData to create an object
        var obj = JSON.parse( queryObj.jsonData );

        // as the object is created, the live below will print "bar"
        console.log( obj.foo );

    }
).listen(80);
_

これはGETで機能することに注意してください。 POSTデータを取得するには、ここを見てください: Node.jsでPOSTデータをどのように抽出しますか?

オブジェクトをJSONにシリアル化し、jsonDataに値を設定するには、JSON.stringify(credentials)(最新のブラウザーの場合)または JSON-js を使用できます。ここでの例: jQueryでJSONにシリアル化

16
davidbuzatto