访问由Node的Express bodyParser()解析的JSON字符串

时间:2014-03-06 21:37:07

标签: javascript ajax json node.js express

问题:解析的JSON对象是什么?

我已成功向服务器发送JSON字符串,但我无法访问该对象。

客户端脚本,发送JSON:

var loginCredentials= {
    "username":creds.username,
    "password":creds.password };

request = $.ajax({
    url: "http://127.0.0.1:8080/login",
    type: "POST",
    crossDomain: true,
    data: JSON.stringify(loginCredentials),
    dataType: "json"
});

登录监听器,等待并据称解析JSON:

function listen(){
    app.use(express.bodyParser());

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

        var util = require('util');
        console.log(util.inspect(req.body, false, null));
        console.log(req.body.username);

    });

    app.listen(8080, function() {
        console.log('Server running at http://127.0.0.1:8080/');
    });
}

哪些日志:

Server running at http://127.0.0.1:8080/
{ '{"username":"username1","password":"badpassword"}': '' }
undefined

所以看起来我的JSON被正确解析了,但我试图通过req.body.username访问它并且它没有存储在那里。

1 个答案:

答案 0 :(得分:5)

bodyParser不知道您正在发送JSON。它假定主体为标准www-form-urlencoded,因此将其全部解析为单个键。

相反,请根据您的请求发送正确的内容类型:

request = $.ajax({
    url: "http://127.0.0.1:8080/login",
    type: "POST",
    crossDomain: true,
    data: JSON.stringify(loginCredentials),
    contentType : 'application/json',
    dataType: "json" // response type
});

但是,如Do Not Use bodyParser with Express.js中所述,您可能只使用express.json()中间件。