Express
を使用してWeb APIを作成しています。その機能は、APIユーザーがサーバーにファイルを送信できるようにすることです。
これが私のアプリ設定コードです:
_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;
_
解析された本文はreq.body
に設定する必要があります。
ミドルウェアはapp.use
で設定した順序で適用されることに注意してください。私の理解では、bodyParserを複数回適用すると、その順序で本体の解析が試行され、最後の結果が残ります。 req.body
を操作するミドルウェア。つまり、bodyParser.json()とbodyParser.raw()はどちらも入力を受け入れるため、実際には、バッファーからJSONへのすべてを解析しようとすることになります。
生データを送信してボディパーサーで取得したい場合は、次のように構成します。
app.use(bodyParser.raw({ inflate: true, limit: '100kb', type: 'text/xml' }));
その動作はボディコンテンツを破損しません。