如何从Node.Js Express中的帖子数据接收(和解码)JSON?

时间:2017-06-16 12:13:51

标签: json node.js express post

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

        $.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?    
});

更新

我找到了有关身体解析器的信息,发现我的网站模板已经包含了它们。特别是,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包含

enter image description here

在客户端,它包含

enter image description here

即。充满了数据。

可能是什么问题?

更新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"]},...

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

enter image description here

(等号不应该是JSON)。

JSON.parse失败。

3 个答案:

答案 0 :(得分:2)

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

npm install body-parser

在快递应用中配置。

在下面找到示例代码

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

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

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

答案 1 :(得分:1)

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

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

            }
        });

stringifycontentType是强制性的。

答案 2 :(得分:0)

前面:

axios.post('/attack', {
        number:number,
        count:count
        }, 
        {
            headers:{contentType: "application/json; charset=utf-8"}
        })
        .then((response) => {
            console.log(response);
        })
        .catch((error) => {
            console.log(error);
        });
}

后退:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()

app.use(bodyParser.json())

app.post('/attack', (req, res) => {
    let data = req.body
    console.log(data)
    res.send('200')
})

控制台日志:{ number: '(number)', count: '(count)' }