推荐答案
在 Fastify 中使用 JSON Schema 校验请求参数,可以通过在路由定义时指定 schema 属性来实现。以下是一个示例:
// www.javascriptcn.com code example
const fastify = require('fastify')({ logger: true });
fastify.post('/user', {
schema: {
body: {
type: 'object',
required: ['name', 'age'],
properties: {
name: { type: 'string' },
age: { type: 'number' }
}
}
},
handler: (request, reply) => {
reply.send({ message: 'User created successfully!' });
}
});
fastify.listen(3000, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
});在这个示例中,我们定义了一个 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);
}
});在这个示例中,我们捕获了所有验证错误,并返回了一个自定义的错误响应。