リクエスト
リクエスト
ハンドラ関数の最初の引数は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])を参照してください。