Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Express.js:将数据作为req.body对象的键而不是req.body的值发布?_Json_Node.js_Post_Express - Fatal编程技术网

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了!