リクエストボディは、HTTPリクエスト種、POST、PUT、PATCHリクエストメソッドの三種類、いわゆるリクエスト、ネイティブHTTP Nodejsモジュールが含まれ、流れ体に基づいて要求を受信した方法を解析します。
ボディパーサーHTTPリクエストボディミドルウェアを解析 JSONを解析することができる。このモジュールを使用して、生、テキスト、URLエンコードフォーマットのリクエストボディ、
ノードネイティブHTTPモジュール、データを要求REQオブジェクトに対するユーザリクエストにカプセル化され、オブジェクトがIncomingMessageで、オブジェクトは、ストリーム・オブジェクトを読み取られます。ネイティブHTTPサーバが第三者に依存しているか、モジュールを解析していない場合は、以下の方法を要求し、リクエストボディを解析して
constの HTTP =( 'HTTP'に必要)。 http.createServer(関数(REQ、RES){ 場合 'ポスト' ===(req.method.toLowerCase()){ 本体せ = '' ; // 此步骤为接收数据 req.on( 'データ' 、関数(チャンク){ 本体 + = チャンク; }); // 开始解析 req.on( '末端' 、関数(){ 場合(req.headers [ 'コンテンツタイプ']のindexOf( 'アプリケーション/ JSON')! == - 1 ){ JSON.parse(本体); } そうでない 場合(req.headers [ 'コンテンツタイプ']のindexOf( 'ファイルapplication / octet-streamと')== - 。!。1 ){ // RWAリクエストボディフォーマット解析 } 他 IF(req.headers [ 'コンテンツタイプ'] .indexOf( 'text / plainの')== - !1 ){ // テキストリクエストボディテキスト解析 } 他 IF(req.headers [ 'コンテンツタイプ']のindexOf(「ファイルアプリケーション/ X-WWW-フォーム- 。 !)」URLエンコード== - 1 ){ // URLエンコードフォーマットリクエストボディの解析 } 他{ // 他の形式の解析 } }) } 他{ RES。終わり('その他のモード' ) } })。聞く( 3000)
エクスプレスデフォルトの枠体-パーサがミドルウェアとしてリクエストボディを解析し、app.jsファイル内Expressプロジェクトの作成後に見つけることができます
/ * 引入依赖项* / VARエクスプレス =( '発現'が必要)。 // ...... するvar bodyParserは=( 'ボディパーサー'を必要)。 VaRのルート =は( './ルート/インデックス'を必要とします)。 VARのユーザー =は(」./ルート/ユーザーを必要とします)。 VARアプリ = エクスプレス()。 // ... // 解析アプリケーション/ JSONの app.use(bodyParser.json())。 // 解析アプリケーション/ x-www-form-urlencodedで app.use(bodyParser.urlencoded())。
これは、アプリケーション・プログラム・レベル、その要求を処理するために身体パーサモジュールの導入を可能にします。上記のコード、処理モジュールアプリケーション/ x-www-form-urlencodedで、アプリケーション/ JSONリクエストボディの2つの形式で。
この中間の後、あなたはすべてのルーティングプロセッサにリクエストパラメータにアクセスすることができますreq.body
実際のプロジェクトでは、異なる経路は、コンテンツの異なるタイプを使用することをユーザに要求することができる、ボディパーサーはまた、同様に、その解析個々のルーティング追加要求のためのサポートを表明します
インクルードが必要= VAR( 'Expressのエクスプレス・;) するvar bodyParser =必要( 'bodyParser' ); VARのApp = 新しい新しいExpressを(); // 解析するアプリケーション/ JSONを作成 するvar jsonParser = bodyParser.jsonを(); // アプリケーションを作成します。 / x-www-form-urlencodedで VAR urlencodedParser = bodyParser.urlencoded({拡張:falseに}); // URLエンコードされたPOST /ログイン要求ボディゲット app.post( '/ログイン' 、urlencodedParser、機能(REQ、RES ){ IF(req.body)!返す res.sendStatus(400 ); res.send( + '購入のために利用できる'をreq.body.username); }) //POST / API /ユーザーはJSONエンコードされたリクエストボディの取得 app.postを( '/ API /ユーザの、jsonParser、機能(REQ、RES){ IF(req.body)!戻り res.sendStatus(400 ); // ユーザーを作成しますでreq.body })
<<要求タイプが指定>>
ボディパーサーは、リクエストボディのコンテンツタイプの特定のタイプのための1つ又は解析の仕様をサポートする手段、タイミング、タイプパラメータが解析方法で解析のContent-Typeを指定する追加することによって変更することができます。
例えば、text / plainのコンテンツタイプのためにJSONの解析を使用して
app.use(bodyParser.json({タイプ: 'text / plainの'}))
このオプションは、複数の非標準のリクエストヘッダに解決されます
// JSONカスタム解析 :app.use(bodyParser.json({ 'ファイルアプリケーション/ JSON * +'型)}) // 解析カスタムバッファ app.use(bodyParser.raw({タイプ:「ファイルアプリケーション/ VNDを型.custom ' })) // HTML文字列処理としてリクエストボディを :app.use(bodyParser.text({タイプ' )テキスト/ HTML「})
<<ボディパーサーモジュールAPI >>
身体が要求を解決する際に時間が空である場合、分析値は、req.body特性を置かれ、空の被写体} { --- bodyParser.json() - 解析JSON形式 --- bodyParser.raw( ) - バイナリフォーマットを解析 --- bodyParser.text() - パーステキスト形式 --- bodyParser.urlencoded() -パーステキスト形式
出典ます。https://www.jianshu.com/p/cd3de110b4b6