推荐答案
在 Fastify 中使用 JSON Schema 校验请求参数,可以通过在路由定义时指定 schema
属性来实现。以下是一个示例:
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- --- --------------------- - ------- - ----- - ----- --------- --------- -------- ------- ----------- - ----- - ----- -------- -- ---- - ----- -------- - - - -- -------- --------- ------ -- - ------------ -------- ----- ------- -------------- --- - --- -------------------- ----- -- - -- ----- - ----------------------- ---------------- - ---
在这个示例中,我们定义了一个 POST 路由 /user
,并在 schema
中指定了请求体的 JSON Schema。如果请求体不符合定义的 Schema,Fastify 会自动返回一个 400 错误响应。
本题详细解读
1. JSON Schema 的作用
JSON Schema 是一种用于描述 JSON 数据结构的标准。在 Fastify 中,JSON Schema 主要用于校验请求参数(如请求体、查询参数、路径参数等),确保它们符合预期的格式和类型。
2. 如何在 Fastify 中使用 JSON Schema
在 Fastify 中,可以通过在路由定义时指定 schema
属性来使用 JSON Schema。schema
属性可以包含以下字段:
body
: 校验请求体。query
: 校验查询参数。params
: 校验路径参数。headers
: 校验请求头。
每个字段的值都是一个 JSON Schema 对象,用于描述对应参数的结构和类型。
3. 示例解析
在推荐答案的示例中,我们定义了一个 POST 路由 /user
,并在 schema
中指定了 body
的 JSON Schema:
type: 'object'
表示请求体必须是一个对象。required: ['name', 'age']
表示请求体必须包含name
和age
两个字段。properties
定义了name
和age
的类型,name
必须是字符串,age
必须是数字。
如果请求体不符合这个 Schema,Fastify 会自动返回一个 400 错误响应,并附带详细的错误信息。
4. 自定义错误响应
如果需要自定义错误响应,可以使用 Fastify 的 setErrorHandler
方法:
fastify.setErrorHandler((error, request, reply) => { if (error.validation) { reply.status(400).send({ error: 'Invalid request body' }); } else { reply.send(error); } });
在这个示例中,我们捕获了所有验证错误,并返回了一个自定义的错误响应。