req.body пусто экспресс js - PullRequest
       16

req.body пусто экспресс js

0 голосов
/ 03 сентября 2018

Я часами пытался выяснить, почему req.body пусто. Я везде смотрел на stackoverflow и пробовал все, но не повезло.

Я попытался установить:

app.use(bodyParser.urlencoded({extended: false})); //false

но это ничего не изменило

Вот 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 index = require('./routes/index');
var ajax = require('./routes/ajax');


var app = express();

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

// 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: true}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.disable('etag'); //disable cache control

app.use('/', index);
app.use('/ajax', ajax);


// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handler
app.use(function (err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

module.exports = app;

Теперь давайте посмотрим на ajax.js

var express = require('express');
var router = express.Router();
router.post('/1/kyc/form', function (req, res, next) {
    console.log(req.body) //prints {}
});

Это запрос, выполненный клиентом:

enter image description here

1 Ответ

0 голосов
/ 03 сентября 2018

Недопустимый заголовок Content-Type вашего запроса:

Content-Type: application/json;

Завершающей точки с запятой не должно быть. Так и должно быть:

Content-Type: application/json

FWIW, здесь не используется bodyParser.urlencoded; поскольку содержимое тела - JSON, bodyParser.json обрабатывает тело запроса. Но вполне нормально, что оба этих парсеров тела активны.

РЕДАКТИРОВАТЬ : если то, что отправляет клиент, находится за пределами вашего контроля (или это слишком хлопотно, чтобы исправить это на стороне клиента), вы можете добавить дополнительное промежуточное программное обеспечение для Express, которое исправит неверный заголовок :

app.use(function(req, res, next) {
  if (req.headers['content-type'] === 'application/json;') {
    req.headers['content-type'] = 'application/json';
  }
  next();
});

Убедитесь, что вы делаете это до строки, которая загружает bodyParser.json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...