来自我正在做的客户:
$.ajax({
url: '/create',
type: 'POST',
data: JSON.stringify({
theme: "somevalue",
snippet: {
name: "somename",
content: "somevalue"
}
}),
complete: function (response)
{
}
});
服务器上的(node.js/express.js
)我正在做:
var app = express();
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
.......
...
app.post('/create', function (req, res)
{
var dataReceived = req.body;
});
我预计dataReceived
的值为:
{
"theme" : "somevalue",
"snippet" : {
"name": "somename",
"content" : "somevalue"
}
}
相反,dataReceived
的值为:
{
'{"theme":"somevalue","snippet":"name":"somename","content":"somevalue"}}': ''
}
这真的很奇怪,我找不到我做错了什么。有什么想法吗?
来自BodyParser module documentation:
bodyParser.urlencoded(选项)
返回仅解析urlencoded主体的中间件。这个解析器 仅接受正文的UTF-8编码并支持自动 gzip和deflate编码的膨胀。
在主页上填充包含已解析数据的新主体对象 中间件(即req.body)之后的请求对象。这个对象会 包含键值对,其中值可以是字符串或数组 (当扩展为false时)或任何类型(当扩展为真时)。
这与我的问题有关吗?
答案 0 :(得分:2)
在客户端删除Stringify
data
或在服务器端再次解析
$.ajax({
url: '/create',
type: 'POST',
data: {
theme: "somevalue",
snippet: {
name: "somename",
content: "somevalue"
}
},
complete: function (response)
{
}
});
答案 1 :(得分:1)
从客户端请求标题中删除此内容类型
'Content-Type':'application/x-www-form-urlencoded'
答案 2 :(得分:0)
您可以使用VALUE来获取KEY,如下所示:
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
答案 3 :(得分:0)
如果要使用JSON.stringify
,请在客户端Ajax调用上设置此内容类型:
contentType: "application/json"