Nodeを使用してHTTPリクエストの本文データを取得する

Nodeを使用してHTTPリクエスト本文を介してJSONとして送信されたデータを抽出する方法をご覧ください

として送信されたデータを抽出する方法は次のとおりですJSONリクエスト本文で。

Expressを使用している場合、それは非常に簡単です。body-parserノードモジュール。

たとえば、このリクエストの本文を取得するには、次のようにします。

const axios = require('axios')

axios.post(’/todos’, { todo: ‘Buy the milk’, })

これは、一致するサーバー側コードです。

const bodyParser = require('body-parser')

app.use( bodyParser.urlencoded({ extended: true, }) )

app.use(bodyParser.json())

app.post(’/endpoint’, (req, res) => { console.log(req.body.todo) })

Expressを使用しておらず、バニラノードでこれを実行したい場合は、もちろん、Expressがこれの多くを抽象化するため、もう少し作業を行う必要があります。

理解しておくべき重要なことは、HTTPサーバーを初期化するときにhttp.createServer()、サーバーがすべてのHTTPヘッダーを取得したときにコールバックが呼び出されますが、リクエストの本文は取得されません。

ザ・request接続コールバックで渡されるオブジェクトはストリーム

したがって、処理される本文のコンテンツをリッスンする必要があり、それはチャンクで処理されます。

まず、ストリームを聞いてデータを取得しますdataイベント、およびデータが終了すると、ストリームendイベントは一度呼び出されます:

const server = http.createServer((req, res) => {
  // we can access HTTP headers
  req.on('data', (chunk) => {
    console.log(`Data chunk available: ${chunk}`)
  })
  req.on('end', () => {
    //end of data
  })
})

したがって、データにアクセスするには、文字列を受け取ることを期待して、それを配列に入れる必要があります。

const server = http.createServer((req, res) => {
  let data = []
  req.on('data', (chunk) => {
    data.push(chunk)
  })
  req.on('end', () => {
    JSON.parse(data).todo // 'Buy the milk'
  })
})

私の無料ダウンロードNode.jsハンドブック


その他のノードチュートリアル: