2016-12-27 8 views
0

私はExpress 4.13.3を使用しています。私のreq.bodyはGETリクエストでは常に空です。これは、POST要求時に正しいデータで満たされています。どうしてこれなの? Expressのドキュメントでこの相違点を参照することはできませんでした。`req.body`はGET要求で常に空です

マイ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} `); 
+0

あなたのノード/エクスプレス構成の一部を追加してください、おそらくこれはあなたに有用である可能性http://stackoverflow.com/questions/9177049/express-js-req-body-undefined – sebasaenz

+0

@sebasaenzが追加されました特急設定 – ABC

+0

可能性のある[このステートメントは正しいですか? HTTP GETメソッドには常にメッセージ本文がありません](http://stackoverflow.com/questions/5216567/is-this-statement-correct-http-get-method-always-has-no-message-body) –

答えて

1

HTTP GETリクエストのためのボディは空でなければなりません。それは無意味です。 GET要求に要求本体を追加することは理論的には可能ですが、多くのクライアントは処理しないか、または拒否し、多くのサーバーがそれを除去します。

要するにこれは意図的です。実際にGETにリクエスト本文がある場合は、それを削除するか、より適切なHTTPメソッドに切り替えます。 RFC 7231

1

Section 4.3.1

GETリクエストメッセージ内のペイロード全く定義された意味を有していません。ペイロード本体をGETリクエストで送信すると、既存の実装によってはリクエストを拒否することがあります。

関連する問題