Express js req.body 返回空

Jab*_*baa 5 javascript mysql node.js express

我已经尝试了其他一些 stackoverflow 帖子中的所有解决方案,但没有解决我的问题。

这是我的 app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');



var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

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

var index = require('./routes/index');
var v1    = require('./routes/route');

app.use('/', index);
//routes for api
app.use('/v1',v1);
Run Code Online (Sandbox Code Playgroud)

这是我的post控制器

module.exports = {

    createUser:function (req,res) {
        console.log(req.body);
        res.send('ok'+req.body.test);
    }
}
Run Code Online (Sandbox Code Playgroud)

req.body返回{}即使请求体中包含的参数。

我正在使用邮递员插件检查 api。

更新

邮递员请求

在此处输入图片说明

p0k*_*k8_ 5

body-parser

bodyParser 对象公开各种工厂以创建中间件。所有中间件都将req.body使用解析的主体填充属性,{}如果没有要解析的主体(或返回错误),则填充空对象。


app.use(bodyParser.urlencoded({ extended: true })); // for encoded bodies
Run Code Online (Sandbox Code Playgroud)

在中间件之后的请求对象上填充一个包含解析数据的新body对象,req.body将包含解析数据,该对象将包含键值对,其中值可以是字符串或数组

内容类型是 application/x-www-form-urlencoded


app.use(bodyParser.json()); // for json encoded bodies
Run Code Online (Sandbox Code Playgroud)

包含解析数据的新主体对象填充在中间件之后的请求对象上(即req.body)。

内容类型是 application/json


application/json当您{"test":"hello"}像这样发布数据时使用。www-form-url-encoded用于在使用app.use(bodyParser.urlencoded({ extended: true }));. 它们都是不同的,都有自己的用例