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