本文へスキップ
バージョン: 最新版 (v5.0.x)

リクエスト

リクエスト

ハンドラ関数の最初の引数はRequestです。

Requestは、以下のフィールドを含むFastifyのコアオブジェクトです。

  • query - パースされたクエリ文字列。querystringParserでフォーマットが指定されています。
  • body - リクエストペイロード。Fastifyがネイティブにパースするリクエストペイロードと、他のコンテンツタイプをサポートする方法については、コンテンツタイプパーサーを参照してください。
  • params - URLに一致するパラメータ
  • headers - ヘッダーのゲッターとセッター
  • raw - Nodeコアからの受信HTTPリクエスト
  • server - 現在のカプセル化コンテキストにスコープされたFastifyサーバーインスタンス
  • id - リクエストID
  • log - 受信リクエストのロガーインスタンス
  • ip - 受信リクエストのIPアドレス
  • ips - 受信リクエストのX-Forwarded-Forヘッダー内のIPアドレスの配列(最も近い順に)。trustProxyオプションが有効になっている場合のみ。
  • host - 受信リクエストのホスト(trustProxyオプションが有効になっている場合、X-Forwarded-Hostヘッダーから取得)。HTTP/2との互換性のため、ホストヘッダーが存在しない場合は:authorityを返します。
  • hostname - ポートを含まない受信リクエストのホスト
  • port - サーバーがリスンしているポート
  • protocol - 受信リクエストのプロトコル(httpsまたはhttp
  • method - 受信リクエストのメソッド
  • url - 受信リクエストのURL
  • originalUrl - urlと似ていますが、内部のリルーティングの場合に元のurlにアクセスできます。
  • is404 - リクエストが404ハンドラによって処理されている場合はtrue、そうでない場合はfalse
  • socket - 受信リクエストの基になる接続
  • context - 非推奨。代わりにrequest.routeOptions.configを使用してください。Fastifyの内部オブジェクトです。直接使用したり変更したりしないでください。特別なキーにアクセスするのに役立ちます。
    • context.config - ルートのconfigオブジェクト。
  • routeOptions - ルートのoptionオブジェクト
    • bodyLimit - サーバーの制限またはルートの制限のいずれか
    • config - このルートのconfigオブジェクト
    • method - ルートのHTTPメソッド
    • url - このルートと一致するURLのパス
    • handler - このルートのハンドラ
    • attachValidation - validationErrorをリクエストにアタッチする(スキーマが定義されている場合)
    • logLevel - このルートに定義されたログレベル
    • schema - このルートのJSONスキーマ定義
    • version - エンドポイントのバージョンを定義するsemver互換文字列
    • exposeHeadRoute - GETルートの兄弟HEADルートを作成します。
    • prefixTrailingSlash - プレフィックス付きルートとして/の処理方法を決定するために使用される文字列。
  • .getValidationFunction(schema | httpPart) - 指定されたスキーマまたはHTTPパートのバリデーション関数を返します(いずれかが設定またはキャッシュされている場合)。
  • .compileValidationSchema(schema, [httpPart]) - 指定されたスキーマをコンパイルし、デフォルト(またはカスタマイズされた)ValidationCompilerを使用してバリデーション関数を返します。オプションのhttpPartは、提供された場合、ValidationCompilerに転送され、デフォルトはnullです。
  • .validateInput(data, schema | httpPart, [httpPart]) - 指定されたスキーマを使用して指定された入力を検証し、シリアライズされたペイロードを返します。オプションのhttpPartが提供されている場合、この関数は、そのHTTPステータスコードに対して指定されたシリアライザ関数を使用します。デフォルトはnullです。

ヘッダー

request.headersは、受信リクエストのヘッダーを含むオブジェクトを返すゲッターです。次のようにカスタムヘッダーを設定できます。

request.headers = {
'foo': 'bar',
'baz': 'qux'
}

この操作により、リクエストヘッダーに新しい値が追加され、request.headers.barを呼び出すことで読み取ることができます。さらに、標準のリクエストヘッダーにはrequest.raw.headersプロパティでアクセスできます。

注:パフォーマンス上の理由から、not foundルートでは、ヘッダーにSymbol('fastify.RequestAcceptVersion')という追加のプロパティが追加される場合があります。

fastify.post('/:params', options, function (request, reply) {
console.log(request.body)
console.log(request.query)
console.log(request.params)
console.log(request.headers)
console.log(request.raw)
console.log(request.server)
console.log(request.id)
console.log(request.ip)
console.log(request.ips)
console.log(request.host)
console.log(request.hostname)
console.log(request.port)
console.log(request.protocol)
console.log(request.url)
console.log(request.routeOptions.method)
console.log(request.routeOptions.bodyLimit)
console.log(request.routeOptions.method)
console.log(request.routeOptions.url)
console.log(request.routeOptions.attachValidation)
console.log(request.routeOptions.logLevel)
console.log(request.routeOptions.version)
console.log(request.routeOptions.exposeHeadRoute)
console.log(request.routeOptions.prefixTrailingSlash)
console.log(request.routeOptions.logLevel)
request.log.info('some info')
})

.getValidationFunction(schema | httpPart)

提供されたschemaまたはhttpPartを使用してこの関数を呼び出すと、さまざまな入力を検証するために使用できるvalidation関数が返されます。提供された入力のいずれも使用してシリアライゼーション関数が検出されなかった場合は、undefinedを返します。

この関数にはerrorsプロパティがあります。最後の検証中に発生したエラーはerrorsに割り当てられます。

const validate = request
.getValidationFunction({
type: 'object',
properties: {
foo: {
type: 'string'
}
}
})
console.log(validate({ foo: 'bar' })) // true
console.log(validate.errors) // null

// or

const validate = request
.getValidationFunction('body')
console.log(validate({ foo: 0.5 })) // false
console.log(validate.errors) // validation errors

バリデーション関数のコンパイル方法の詳細については、.compileValidationSchema(schema, [httpStatus])を参照してください。

.compileValidationSchema(schema,[httpPart])

この関数は、バリデーションスキーマをコンパイルし、データの検証に使用できる関数を返します。返される関数(別名 *バリデーション関数*)は、提供されたSchemaController#ValidationCompilerを使用してコンパイルされます。WeakMapを使用してこれがキャッシュされるため、コンパイル呼び出しが削減されます。

オプションのパラメータhttpPartは、提供された場合、ValidationCompilerに直接転送されるため、ルートにカスタムValidationCompilerが提供されている場合、バリデーション関数のコンパイルに使用できます。

この関数にはerrorsプロパティがあります。最後の検証中に発生したエラーはerrorsに割り当てられます。

const validate = request
.compileValidationSchema({
type: 'object',
properties: {
foo: {
type: 'string'
}
}
})
console.log(validate({ foo: 'bar' })) // true
console.log(validate.errors) // null

// or

const validate = request
.compileValidationSchema({
type: 'object',
properties: {
foo: {
type: 'string'
}
}
}, 200)
console.log(validate({ hello: 'world' })) // false
console.log(validate.errors) // validation errors

この関数の使用には注意が必要です。提供されたスキーマに基づいてコンパイルされたバリデーション関数がキャッシュされるためです。提供されたスキーマが変更された場合、バリデーション関数はスキーマが変更されたことを検出しません。キャッシュは、以前に提供されたスキーマ(オブジェクト)の参照に基づいているため、以前にコンパイルされたバリデーション関数を再利用します。

スキーマのプロパティを変更する必要がある場合は、常に完全に新しいスキーマ(オブジェクト)を作成してください。そうしないと、実装はキャッシュメカニズムの恩恵を受けません。

例として、次のスキーマを使用します。

const schema1 = {
type: 'object',
properties: {
foo: {
type: 'string'
}
}
}

ダメな例

const validate = request.compileValidationSchema(schema1)

// Later on...
schema1.properties.foo.type. = 'integer'
const newValidate = request.compileValidationSchema(schema1)

console.log(newValidate === validate) // true

正しい例

const validate = request.compileValidationSchema(schema1)

// Later on...
const newSchema = Object.assign({}, schema1)
newSchema.properties.foo.type = 'integer'

const newValidate = request.compileValidationSchema(newSchema)

console.log(newValidate === validate) // false

.validateInput(data,[schema | httpStatus], [httpStatus])

この関数は、提供されたスキーマまたはHTTPパートに基づいて入力を検証します。両方が提供されている場合、httpPartパラメータが優先されます。

指定されたschemaにバリデーション関数が存在しない場合、新しいバリデーション関数がコンパイルされ、httpPartが提供されている場合は転送されます。

request
.validateInput({ foo: 'bar'}, {
type: 'object',
properties: {
foo: {
type: 'string'
}
}
}) // true

// or

request
.validateInput({ foo: 'bar'}, {
type: 'object',
properties: {
foo: {
type: 'string'
}
}
}, 'body') // true

// or

request
.validateInput({ hello: 'world'}, 'query') // false

バリデーションスキーマのコンパイル方法の詳細については、.compileValidationSchema(schema, [httpStatus])を参照してください。