繁体   English   中英

Express js req.body返回空

[英]Express js req.body returns empty

我已尝试过来自另一个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);

这是我的post控制器

module.exports = {

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

即使请求主体包含参数, req.body返回{}

我正在用postman插件检查api。

更新

邮差要求

在此输入图像描述

删除最后4行代码后(确保正确配置路由)并添加此测试行:

app.post('/ping', function (req,res) {
    console.log(req.body);
    res.send('ok ' + req.body.test);
});
let server = http.createServer(app);
server.listen(8899, function onstart() {
    console.log('server listening');
});

当我跑:

curl -X POST http://localhost:8899/ping -d '{"test": 1234}'

ok undefined ,就像你做的那样。 添加适当的content-type标头后:

curl -X POST http://localhost:8899/ping -d '{"test": 1234}' -H "content-type: application/json"

它就像一个魅力,我ok 1234 所以我认为你错过邮递员中的"content-type: application/json"标题。

body-parser

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


app.use(bodyParser.urlencoded({ extended: true })); // for encoded bodies

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

Content-Type是application/x-www-form-urlencoded


app.use(bodyParser.json()); // for json encoded bodies

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

Content-Type是application/json


当您发布数据{"test":"hello"}时,会使用application/json www-form-url-encoded用于在使用app.use(bodyParser.urlencoded({ extended: true }));时从url获取数据作为对象的app.use(bodyParser.urlencoded({ extended: true })); 它们都是不同的,有自己的用例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM