2016-07-19 9 views
2

Expressを使用してWeb APIを作成しています。 APIユーザーがファイルをサーバーに送信できるようにする機能です。ここで`bodyParser.raw()`を使って元のボディを取得するには?

は私のアプリのセットアップコードです:

var express = require('express'); 
var path = require('path'); 
// ... 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

// API routes 
var images = require('./routes/api/img'); 

var app = express(); 

app.use(bodyParser.raw()); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/api', images); 

// ... 

module.exports = app; 

私はapp.use(bodyParser.raw());を使用していますことに注意してください。

POST要求から生のバイトを取得するにはどうすればよいですか?

const express = require('express'); 
const router = express.Router(); 

/* POST api/img */ 
router.post('/img', function(req, res, next) { 

    // how do I get the raw bytes? 

}); 

module.exports = router; 
+0

コード例を質問に関連する部分のみに絞り込むことを検討してください。この場合、app.use行と第2のコードスニペットのうちのいくつかだけが本当に必要であると思います。 – Squirrel

答えて

0

解析されたボディはreq.bodyに設定する必要があります。

app.useで設定した順序でミドルウェアが適用されることに注意してください。私が理解しているように、bodyParserを複数回適用すると、その順序でボディを解析し、最後のつまり、bodyParser.json()とbodyParser.raw()の両方が入力を受け入れるので、実際にはバッファからJSONまでのすべてを解析しようとします。

+0

'bodyParser.raw()'ミドルウェアを特定の 'Content-Type'に限定する方法はありますか? – Believe2014

+0

優秀な質問、明らかにそこにある! docs [1](https://www.npmjs.com/package/body-parser#bodyparserrawoptions) raw関数は、次のいずれかのキーを含むオプションオブジェクトを取ります。 typeオプションは次のとおりです。ミドルウェアがどのメディアタイプを解析するかを決定するために使用されます。このオプションは、関数または文字列にすることができます。 MIMEタイプにはワイルドカードも使用できますので、必要に応じて細かく設定できます。 – Squirrel

関連する問題