【问题标题】:`req.body` is always empty in GET request`req.body` 在 GET 请求中始终为空
【发布时间】:2017-05-12 03:07:51
【问题描述】:

我使用的是 Express 4.13.3,而我的 req.body 在 GET 请求中始终为空。它在 POST 请求中填充了正确的数据。为什么是这样?我在 Express 文档中找不到任何关于这种差异的参考。

我的 Express 配置:

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} ????`);

【问题讨论】:

标签: rest express get


【解决方案1】:

RFC 7231,Section 4.3.1

GET 请求消息中的有效负载没有定义的语义;在 GET 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。

【讨论】:

    【解决方案2】:

    HTTP GET 请求的正文应为空。这是没有意义的。虽然理论上可以将请求正文添加到 GET 请求中,但许多客户端不这样做或拒绝,并且许多服务器将其剥离。

    简而言之:这是故意的。如果您在 GET 中确实有请求正文,请将其删除或切换到更合适的 HTTP 方法。

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 2019-04-12
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      相关资源
      最近更新 更多