如何从Node.Js Express中的发布数据接收(并解码)JSON?

假设我用以下代码发送了数据:

$.ajax({ type: "POST", url: "/save/" + #{key}, data: transitions2, success: function (data) { }, dataType: "json" }); 

其中transitions2是分层的JS对象。

现在我怎样才能在服务器端完整地收到它

 router.post('/save/:key', function(req, res) { // where is my data here? }); 

UPDATE

我find了关于body parser的信息,发现我的网站模板已经包含了它们。 特别是, app.js包含:

 ... var bodyParser = require('body-parser'); ... // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/data', express.static(path.join(__dirname, '../data'))); app.use('/', index); ... 

所以我写在我的index.js

 ... router.post('/save/:key', function(req, res) { var transitions = req.body; image_data.save_transitions(req.params.key, req.query.postfix, transitions); }); ... 

不幸的是, transitions包含

在这里输入图像说明

而在客户端它包含

在这里输入图像说明

即充满了数据。

可能是什么问题?

更新2

我试图做

  $.ajax({ type: "POST", url: "/save/" + #{key}, data: JSON.stringify(transitions2), success: function (data) { } }); 

我现在在Fiddler2看到,完整的Json通过了。

 [{"start_image":"20170402_1_NATURAL_COL0R","end_image":"20170409_1_NATURAL_COL0R","transition_classes":["no_transition","some_activity"]},... 

不幸的是,在服务器端我观察到截断和损坏的string

在这里输入图像说明

(等号不应该在JSON中)。

和JSON.parse失败。

使用body-parser中间件来检索数据。

 npm install body-parser 

在快速应用程序中configuration。

下面的示例代码

 var bodyParser = require('body-parser'); app.use(bodyParser.json()); 

然后在你的路由器使用以下内容:

  router.post('/save/:key', function(req, res) { var data = req.body // here is your data }); 

问题只在客户端。 用json发布复杂对象的Correc方法是:

  $.ajax({ type: "POST", url: "/save/" + #{key}, data: JSON.stringify(transitions2), contentType: "application/json; charset=utf-8", success: function (data) { } }); 

stringifycontentType是强制性的。