Json Express.js:将数据作为req.body对象的键而不是req.body的值发布?
从我正在做的客户那里:Json Express.js:将数据作为req.body对象的键而不是req.body的值发布?,json,node.js,post,express,Json,Node.js,Post,Express,从我正在做的客户那里: $.ajax({ url: '/create', type: 'POST', data: JSON.stringify({ theme: "somevalue", snippet: { name: "somename", content: "somevalue" } }),
$.ajax({
url: '/create',
type: 'POST',
data: JSON.stringify({
theme: "somevalue",
snippet: {
name: "somename",
content: "somevalue"
}
}),
complete: function (response)
{
}
});
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;
});
在服务器(node.js/express.js
)上,我正在执行以下操作:
$.ajax({
url: '/create',
type: 'POST',
data: JSON.stringify({
theme: "somevalue",
snippet: {
name: "somename",
content: "somevalue"
}
}),
complete: function (response)
{
}
});
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.urlencoded(选项)
返回仅解析URL编码体的中间件。这个解析器
仅接受正文的UTF-8编码,并支持自动
gzip的膨胀和压缩编码
包含已解析数据的新body对象将填充到
中间件之后的请求对象(即请求主体)。这个物体会
包含键值对,其中值可以是字符串或数组
(扩展为false时)或任何类型(扩展为true时)
这与我的问题有关吗?删除客户端的Stringify
$.ajax({
url: '/create',
type: 'POST',
data: {
theme: "somevalue",
snippet: {
name: "somename",
content: "somevalue"
}
},
complete: function (response)
{
}
});
或者在服务器端再次解析它
app.post('/create', function (req, res)
{
var dataReceived = JSON.parse(req.body);
});
只需从客户端请求头中删除此内容类型
'Content-Type':'application/x-www-form-urlencoded'
您可以使用如下值获取密钥:
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
如果要使用
JSON.stringify
,请在客户端ajax调用上设置此内容类型:
contentType: "application/json"
您不需要在前端对请求进行JSON.stringify。您是对的!。我仍然不知道我的数据什么时候应该严格化,什么时候不应该。。无论如何谢谢我认为,如果您在客户端和服务器上都使用javascript,那么就不需要stringify了!