[解決済み] Node.js - Expressを使用して生のリクエストボディを取得する
質問
Expressを使用していて、コードが
app.use(express.bodyParser());
どのようにすれば 生のリクエストボディ ?
どのように解決するのですか?
2を編集します。 リリース1.15.2のボディパーサモジュールは 生モード を導入し、これはボディを バッファ . デフォルトでは、deflateとgzipによる解凍も自動的に処理されます。使用例です。
var bodyParser = require('body-parser');
app.use(bodyParser.raw(options));
app.get(path, function(req, res) {
// req.body is a Buffer object
});
デフォルトでは
options
オブジェクトは以下のようなデフォルトのオプションを持っています。
var options = {
inflate: true,
limit: '100kb',
type: 'application/octet-stream'
};
以外の MIME タイプを生パーサで解析したい場合は、以下のようにします。
application/octet-stream
以外の MIME タイプを解析したい場合は、ここで変更する必要があります。また、次のようなワイルドカードでのマッチングもサポートします。
*/*
または
*/application
.
注意 以下の回答は、ミドルウェアがまだフレームワークにバンドルされていた Express 4 よりも前のバージョンに対応するものです。現代の同等のものは ボディパーサー モジュールで、これは別途インストールする必要があります。
は
rawBody
プロパティはかつて Express にありましたが、バージョン 1.5.1 以降は削除されました。生のリクエストボディを取得するには、bodyParser を使用する前に何らかのミドルウェアを入れる必要があります。これについては GitHub のディスカッションも参照してください。
はこちら
.
app.use(function(req, res, next) {
req.rawBody = '';
req.setEncoding('utf8');
req.on('data', function(chunk) {
req.rawBody += chunk;
});
req.on('end', function() {
next();
});
});
app.use(express.bodyParser());
そのミドルウェアは、実際のデータストリームから読み込んで、それを
rawBody
プロパティに格納します。そして、このように生のボディにアクセスすることができます。
app.post('/', function(req, res) {
// do something with req.rawBody
// use req.body for the parsed body
});
編集します。
このメソッドとbodyParserは共存を拒否しているようです。なぜなら、どちらかが先にリクエストストリームを消費してしまい、どちらか一方が起動しないことになるからです。
end
を決して起動せず、したがって
next()
を呼び出すことはなく、アプリケーションを停止させます。
最も簡単な解決策は、bodyParserのソースを修正することでしょう。 行 57 にある、ConnectのJSONパーサーのソースを変更することです。これは、修正されたバージョンがどのように見えるかを示しています。
var buf = '';
req.setEncoding('utf8');
req.on('data', function(chunk){ buf += chunk });
req.on('end', function() {
req.rawBody = buf;
var first = buf.trim()[0];
...
});
この場所にファイルがあるはずです。
/node_modules/express/node_modules/connect/lib/middleware/json.js
.
関連
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] Node.jsで現在のスクリプトのパスを取得するにはどうしたらいいですか?
-
[解決済み] NPMパッケージの以前の正確なバージョンをインストールするにはどうすればよいですか?
-
[解決済み] エラーが発生しました。クライアントに送信された後にヘッダーを設定できない
-
[解決済み] nodeやExpressを使用してJSONを返す正しい方法
-
[解決済み】Expressで完全なURLを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Nodejs: Errorを解決する方法。ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み] テスト
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み】nodemon - app crashed - waiting for file changes before start
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] Npmエラー - Windows NT - 解決方法
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] Macでポート3000をロックしているプロセスを見つける(そして殺す)【終了
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] DynamoDBで一括削除するにはどうしたらいいですか?