使用 Fastify 和 Joi 进行有效的请求验证

在现代 Web 开发中,输入验证是一项必不可少的任务。请求验证可以使我们在处理数据之前,确保它们符合我们的期望,从而提高应用程序的可靠性和安全性。Fastify 是一个快速和低开销的 Web 框架,而 Joi 是一个强大的模式验证库,使用它们可以快速构建出高效的请求验证系统。

安装和配置 Fastify 和 Joi

首先,我们需要安装和配置 Fastify 和 Joi。安装 Fastify 和 Joi:

安装完成后,在你的应用程序中导入我们需要的库:

const fastify = require('fastify')({ logger: true })
const Joi = require('joi')

接下来,使用 Fastify 插件注册 Joi:

fastify.register(require('fastify-joi'))

现在,我们已经配置了 Fastify 和 Joi,可以开始编写验证逻辑了。

使用 Joi 编写验证逻辑

Joi 提供多种验证器,包括字符串、数字、日期和数组等等。使用这些验证器可以轻松验证传入的数据。下面是一个使用 Joi 检查请求体中是否提供了 name 和 age 字段的示例:

fastify.post('/', {
  schema: {
    body: Joi.object({
      name: Joi.string().required(),
      age: Joi.number().integer().positive().required(),
    }),
  },
}, (req, res) => {
  const { name, age } = req.body
  // Do something with name and age
  res.send({ message: 'Request body is valid.' })
})

在上面的示例中,我们使用了 fastify.post() 注册了一个处理 POST 请求的路由处理程序。我们使用了 Joi.object() 定义了一个包含 name 和 age 字段的对象,然后使用 Joi.string()Joi.number() 分别定义了这两个字段的验证规则。

使用 Joi.required() 来添加“必须”的验证规则,如果验证失败,则会抛出一个异常。

自定义错误信息

在默认情况下,Joi 的错误消息可能不太友好,不太容易理解。不过,你可以重写自己的错误消息,来更好地告知用户哪一个参数是有问题的。

fastify.post('/', {
  schema: {
    body: Joi.object({
      name: Joi.string().required().messages({
        'string.empty': `名字不能为空`,
        'any.required': `名字是必填项`,
      }),
      age: Joi.number().integer().positive().required().messages({
        'number.integer': `年龄必须是整数`,
        'number.positive': `年龄必须是正数`,
        'any.required': `年龄是必填项`,
      }),
    }),
  },
}, (req, res) => {
  const { name, age } = req.body
  // Do something with name and age
  res.send({ message: 'Request body is valid.' })
})

在这个示例中,我们使用 .messages() 方法来自定义错误消息。这将五个定义放到了我们的验证器的错误对象中。这些“键”是由验证器生成的错误消息中的“占位符”,它们可以用来定义自己的默认错误消息。

总结

在本文中,我们介绍了如何使用 Fastify 和 Joi 来验证请求体中的数据。我们演示了如何定义和配置 Fastify 和 Joi,并展示了如何使用 Joi 来定义各种验证器和自定义错误消息。如果你遇到了类似的需求,不要犹豫,使用 Fastify 和 Joi 来进行请求验证吧!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a88453add4f0e0ff1a664f


纠错反馈