使用 body-parser 表达 4.13 空白 json 请求

Express 4.13 blank json request with 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 上的正文解析器示例。

知道它为什么这样做吗?

谢谢!

根据 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 })

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

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

验证您的 post 请求是否正在触发也很好...

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