web-dev-qa-db-ja.com

`bodyParser.raw()`を使用して生のボディを取得する方法

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;
_
9
Believe2014

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

ミドルウェアはapp.useで設定した順序で適用されることに注意してください。私の理解では、bodyParserを複数回適用すると、その順序で本体の解析が試行され、最後の結果が残ります。 req.bodyを操作するミドルウェア。つまり、bodyParser.json()とbodyParser.raw()はどちらも入力を受け入れるため、実際には、バッファーからJSONへのすべてを解析しようとすることになります。

2
Squirrel

生データを送信してボディパーサーで取得したい場合は、次のように構成します。

app.use(bodyParser.raw({ inflate: true, limit: '100kb', type: 'text/xml' }));

その動作はボディコンテンツを破損しません。

4
joelton