リクエスト
リクエスト
ハンドラ関数の最初の引数はRequest
です。
Requestは、以下のフィールドを含むFastifyのコアオブジェクトです。
query
- パースされたクエリ文字列。querystringParser
でフォーマットが指定されています。body
- リクエストペイロード。Fastifyがネイティブにパースするリクエストペイロードと、他のコンテンツタイプをサポートする方法については、コンテンツタイプパーサーを参照してください。params
- URLに一致するパラメータheaders
- ヘッダーのゲッターとセッターraw
- Nodeコアからの受信HTTPリクエストserver
- 現在のカプセル化コンテキストにスコープされたFastifyサーバーインスタンスid
- リクエストIDlog
- 受信リクエストのロガーインスタンスip
- 受信リクエストのIPアドレスips
- 受信リクエストのX-Forwarded-For
ヘッダー内のIPアドレスの配列(最も近い順に)。trustProxy
オプションが有効になっている場合のみ。host
- 受信リクエストのホスト(trustProxy
オプションが有効になっている場合、X-Forwarded-Host
ヘッダーから取得)。HTTP/2との互換性のため、ホストヘッダーが存在しない場合は:authority
を返します。hostname
- ポートを含まない受信リクエストのホストport
- サーバーがリスンしているポートprotocol
- 受信リクエストのプロトコル(https
またはhttp
)method
- 受信リクエストのメソッドurl
- 受信リクエストのURLoriginalUrl
-url
と似ていますが、内部のリルーティングの場合に元のurl
にアクセスできます。is404
- リクエストが404ハンドラによって処理されている場合はtrue、そうでない場合はfalsesocket
- 受信リクエストの基になる接続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])を参照してください。