如何从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) { } });
stringify
和contentType
是强制性的。