Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

`req.body` is always empty in GET request

Tags:

rest

express

get

I'm using Express 4.13.3 and my req.body is always empty on a GET request. It's filled with the correct data on POST request. Why is this? I couldn't find any reference to this difference in the Express docs.

My Express configuration:

function onError(err, req, res, next) { // eslint-disable-line no-unused-vars
  // The error id is attached to `res.sentry` to be returned
  // and optionally displayed to the user for support.
  res.statusCode = 500; // eslint-disable-line no-param-reassign
  res.end(`${res.sentry}\n`);
}

const render = require('../public/assets/SSR');

const app = express();

// sentry.io
app.use(raven.middleware.express.requestHandler(process.env.SENTRY_DSN));

const db = connectDb();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(cookieParser());

if (process.env.NODE_ENV === 'dev') {
  // Hot reloading using existing express server
  const compiler = webpack(webpackConfig);
  app.use(webpackDevMiddleware(compiler, {
    noInfo: true,
    publicPath: webpackConfig.output.publicPath,
  }));
  app.use(webpackHotMiddleware(compiler));

  app.use(logger('dev'));
}

if (process.env.NODE_ENV === 'prod') {
  app.use(helmet());
}

configPassport(app, passport, db);
configRoutes(app, passport, db);
app.use(ua.middleware(process.env.GA_TRACKING_ID, { cookieName: '_ga' }));

// sentry.io
// The error handler must be before any other error middleware
app.use(raven.middleware.express.errorHandler(process.env.SENTRY_DSN));

// Optional fallthrough error handler
app.use(onError);

app.get('*', render.default);

const port = process.env.PORT || 3000;
app.listen(port);
console.log(`Listening on port ${port}`);
console.log(`You are working in ${process.env.NODE_ENV} 😋`);
like image 416
ABC Avatar asked Dec 27 '16 20:12

ABC


1 Answers

The body for a HTTP GET request should be empty. It's meaningless. While it's theoretically possible to add a request body to a GET requests, many clients don't or refuse and many servers strip it.

So in short: this is intentional. If you actually have a request body in a GET, remove it or switch to a more appropriate HTTP method.

like image 123
Evert Avatar answered Sep 18 '22 12:09

Evert