Express.js:POST数据作为req.body对象的KEY而不是req.body的VALUE?

来自我正在做的客户:

$.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模块文档 :

bodyParser.urlencoded(选项)

返回仅parsingurlencoded主体的中间件。 此parsing器只接受身体的UTF-8编码,并支持gzip和deflate编码的自动膨胀。

在中间件之后的请求对象(即req.body)上填充包含parsing的数据的新的主体对象。 该对象将包含键值对,其中值可以是string或数组(当扩展为false时)或任何types(当扩展为true时)。

这与我的问题有关吗?

在客户端删除string化

 $.ajax({ url: '/create', type: 'POST', data: { theme: "somevalue", snippet: { name: "somename", content: "somevalue" } }, complete: function (response) { } }); 

或者在服务器端重新parsing

 app.post('/create', function (req, res) { var dataReceived = JSON.parse(req.body); });