问题:解析的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访问它并且它没有存储在那里。
答案 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()
中间件。