Fastify 是一个快速、低开销的 web 框架,它提供了许多有用的功能,其中包括数据校验。在本文中,我们将探讨 Fastify 中同步及异步校验数据的最佳实践,包括如何使用 Fastify 的内置校验器、自定义校验器和异步校验器。
内置校验器
Fastify 提供了内置校验器,可以轻松地校验请求的 query、params、headers 和 body。使用内置校验器时,可以使用 JSON Schema 或 ajv 校验器进行校验。
以下是一个使用 JSON Schema 进行 body 校验的示例:
// javascriptcn.com 代码示例 const schema = { type: 'object', properties: { name: { type: 'string' }, age: { type: 'number' }, email: { type: 'string', format: 'email' } }, required: ['name', 'age', 'email'] } fastify.post('/', { schema: { body: schema } }, async (request, reply) => { const { name, age, email } = request.body // 处理请求 })
在上面的示例中,我们定义了一个 JSON Schema,然后将其传递给了 schema
选项。Fastify 将使用该选项校验请求的 body。如果请求的 body 不符合该 schema,则 Fastify 将自动返回一个 400 错误响应。
自定义校验器
除了内置校验器之外,Fastify 还允许我们创建自定义校验器。自定义校验器可以帮助我们更好地处理复杂的数据校验需求。
下面是一个使用自定义校验器进行 body 校验的示例:
// javascriptcn.com 代码示例 const schema = { type: 'object', properties: { name: { type: 'string' }, age: { type: 'number' }, email: { type: 'string' } }, required: ['name', 'age', 'email'] } fastify.post('/', { schema: { body: schema }, preHandler: async (request, reply) => { const { name, age, email } = request.body if (!name.match(/^[A-Za-z]+$/)) { throw new Error('Invalid name') } if (age < 18 || age > 99) { throw new Error('Invalid age') } if (!email.match(/^[^@]+@[^@]+\.[^@]+$/)) { throw new Error('Invalid email') } } }, async (request, reply) => { // 处理请求 })
在上面的示例中,我们定义了一个自定义校验器,并将其传递给了 preHandler
选项。在 preHandler
中,我们对请求的 body 进行了校验。如果校验失败,则抛出一个错误,Fastify 将自动返回一个 400 错误响应。
异步校验器
有时,数据校验可能涉及到异步操作,例如从数据库中获取数据进行校验。在这种情况下,我们可以使用异步校验器。
下面是一个使用异步校验器进行 body 校验的示例:
// javascriptcn.com 代码示例 const schema = { type: 'object', properties: { name: { type: 'string' }, age: { type: 'number' }, email: { type: 'string' } }, required: ['name', 'age', 'email'] } fastify.post('/', { schema: { body: schema }, preHandler: async (request, reply) => { const { name, age, email } = request.body const user = await getUserByEmail(email) if (user) { throw new Error('Email already exists') } } }, async (request, reply) => { // 处理请求 })
在上面的示例中,我们定义了一个异步校验器,并将其传递给了 preHandler
选项。在异步校验器中,我们使用了 getUserByEmail
方法从数据库中获取用户信息,并检查是否存在该邮箱的用户。如果存在,则抛出一个错误,Fastify 将自动返回一个 400 错误响应。
总结
在本文中,我们探讨了 Fastify 中同步及异步校验数据的最佳实践,包括内置校验器、自定义校验器和异步校验器。通过使用这些技术,我们可以更好地处理数据校验,并确保我们的应用程序可以处理各种数据校验需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650bc83c95b1f8cacd5ddeb2