使用正文解析器

时间:2016-06-29 03:08:41

标签: jquery ajax node.js express body-parser

我有一个快速服务器使用以下参数和路由

var express = require('express');
var bodyParser = require('body-parser');
var router = express.Router();
var app = express();
app.use(router);
app.use(bodyParser.urlencoded());
var jsonParser = bodyParser.json({ type: 'application/json'});

router.post('/login', jsonParser, function(req, res) {
    console.log('request body : ' + req.body);
});

我的ajax回调如下

    var user = {
        username: $("#_username").val(),
        password: $("#_password").val()
    }
    var jsonText = JSON.stringify(user);
    console.log(jsonText);
    $.ajax({
        type: "POST",
        url: "http://localhost:3002/login",
        async: true,
        dataType: 'json',
        data: jsonText,
        cache: false,
        success: function(data, textStatus, xhr) {
        },
        error: function(xhr, textStatus, errorThrown) {
        }
    });

我不明白为什么我只是在身体类型中得到一个空数组,并且在npm上跟随身体解析器示例几乎到了字母。

知道为什么会这样做吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您尚未根据the docs:

创建application/json解析器的实例
var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// create application/json parser 
var jsonParser = bodyParser.json()

// create application/x-www-form-urlencoded parser 
var urlencodedParser = bodyParser.urlencoded({ extended: false })

这行代码更改了json解析器愿意接受的接受“类型” - 您正在更改设置(如果您有一些自定义json对象):

var jsonParser = bodyParser.json({ type: 'application/json'});

最好验证你的帖子请求是否正在解雇......

router.post('/login', jsonParser, function(req, res) {
    console.log("posted!");
}