9

我正在向 node.js 发送带有以下请求的凭据 JSON 对象:

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', ...) 函数)

4

2 回答 2

16

在服务器端,您将收到 jQuery 数据作为请求参数,而不是 JSON。如果您以 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

于 2012-08-16T21:03:55.803 回答
-5

Console.log 请求

http.createServer(
    function (req, res) {

    console.log(req); // will output the contents of the req

    }
).listen(80);

如果成功发送,帖子数据将在某处。

于 2012-08-16T20:24:27.037 回答