我不知道为什么req.body是EMPTY ...... app.js 使用正文解析器中间件(http://www.expressjs.com.cn/4x/api.html#req.body)
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// add baseurl
app.use('/api', index);
app.use('/api', users);
user.js的
router.route('/user')
.post(function (req, res, next) {
console.log(req.body);
console.log(req.headers);
//console.log(JSON.parse(Object.keys(req.body)[0]));
res.json({title: 'RESTful: POST...'});
});
我打印了标题:但是req.body是空的,我使用JSON.parse(Object.keys(req.body)[0])来解析其他类似问题的结果,但它没有对我有用 我使用邮递员来请求POST,
{ 'cache-control': 'no-cache',
'postman-token': 'db7766d7-767c-4d33-be3a-acfa18ac1d9c',
'content-type': 'application/x-www-form-urlencoded',
'user-agent': 'PostmanRuntime/6.4.1',
accept: '*/*',
host: 'localhost:3000',
'accept-encoding': 'gzip, deflate',
'content-length': '0',
connection: 'keep-alive' }
答案 0 :(得分:2)
您的路线似乎配置正确。通过尝试使用curl -d "@/path/to/payload.json" -H "Content-Type: application/json" -X POST http://localhost:3000/api/user
发出相同的请求,我将排除任何与邮递员有趣的业务。
Content-Type: application/x-www-form-urlencoded
那会怎么样?
编辑:根据我在评论中收集的内容,您发布的请求似乎包含{"name":"user"}
标头,但是包含JSON正文Content-Type
。换句话说,内容类型标题和正文不匹配。
由于服务器期望URL编码内容,因此无法解析请求正文。因此,使Content-Type: application/x-www-form-urlencoded
标题符合正文格式非常重要。所以在这种情况下,你有两个选择。
name=user
并将正文更改为Content-Type: application/json
{"name":"user"}
,并将正文保持为{{1}} 答案 1 :(得分:0)
试试这个包。传递表单数据时非常有用,而不是json格式。