推荐答案
在 Fastify 中,可以使用 addSchema 方法来添加 JSON Schema。以下是一个示例代码:
// www.javascriptcn.com code example
const fastify = require('fastify')({ logger: true });
// 添加 JSON Schema
fastify.addSchema({
$id: 'http://example.com/schemas/user.json',
type: 'object',
properties: {
id: { type: 'number' },
name: { type: 'string' }
},
required: ['id', 'name']
});
// 使用添加的 Schema
fastify.post('/user', {
schema: {
body: {
$ref: 'http://example.com/schemas/user.json#'
}
},
handler: (req, reply) => {
reply.send({ message: 'User created successfully!' });
}
});
fastify.listen(3000, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
});本题详细解读
1. addSchema 方法的作用
addSchema 方法用于在 Fastify 应用中注册 JSON Schema。这些 Schema 可以在路由的 schema 选项中通过 $ref 引用,从而避免重复定义相同的 Schema。
2. JSON Schema 的结构
在示例中,我们定义了一个简单的 JSON Schema,用于描述一个用户对象。该 Schema 包含以下部分:
$id: 用于唯一标识该 Schema 的 URI。type: 指定对象的类型,这里为object。properties: 定义对象的属性及其类型。required: 指定哪些属性是必需的。
3. 在路由中使用 Schema
在路由定义中,我们通过 schema 选项引用了之前添加的 JSON Schema。$ref 指向了 addSchema 方法中定义的 $id,从而实现了 Schema 的复用。
4. 运行效果
当客户端向 /user 发送 POST 请求时,Fastify 会自动根据 Schema 验证请求体。如果请求体不符合 Schema 定义,Fastify 会返回 400 错误;如果符合,则执行相应的处理逻辑。
通过这种方式,Fastify 可以有效地管理和复用 JSON Schema,提高代码的可维护性和可读性。