在 Web 应用程序中,安全验证是十分重要的。为了确保安全性,我们需要对用户提交的数据进行验证。数据验证的过程意味着我们要检查用户提交的数据是否符合预期。如果数据不符合预期,那么我们需要拒绝该请求,并向用户返回响应。
在本文中,我们将介绍如何使用 Fastify 和 Joi 对用户提交的数据进行验证。
关于 Fastify 和 Joi
Fastify 是一个流行的 Node.js 框架,其旨在提供快速和低占用的 Web 服务器,同时保持易于扩展。另一方面,Joi 是一个数据验证库,它允许我们指定数据的期望结构,并检查传入数据是否符合此结构。
Fastify 直接支持 Joi,并且使用它非常容易,因此我们将使用 Joi 作为本文的验证库。
创建一个基本的 Fastify 应用程序
我们将从创建一个基本的 Fastify 应用程序开始。首先,我们需要安装 Fastify:
npm install fastify
然后,我们可以编写以下代码来创建一个快速的 Web 服务器:
// www.javascriptcn.com code example
const fastify = require('fastify')()
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
fastify.listen(3000, (err, address) => {
if (err) throw err
console.log(`server listening on ${address}`)
})这是一个基本的 Fastify 应用程序,它使用 fastify 实例来处理 GET 请求,输出消息“hello:world”。在我们开始进行数据验证之前,我们需要了解要验证的数据结构。
定义数据结构
首先,我们需要定义数据结构,以便编写 Joi 校验规则。让我们假设我们正在构建一个注册表单,它将包含以下字段:名称,电子邮件地址,密码和确认密码。我们可以编写以下代码来定义此结构:
// www.javascriptcn.com code example
const registerSchema = {
body: {
type: 'object',
required: ['name', 'email', 'password', 'confirm_password'],
properties: {
name: { type: 'string' },
email: { type: 'string', format: 'email' },
password: { type: 'string', minLength: 6 },
confirm_password: { const: { '$data': '1/password' } },
}
}
}这个对象描述了我们期望的注册表单数据的结构,包含了每个字段的类型、必需性以及其他验证规则。例如,我们需要名字和电子邮件是字符串,密码必须至少有 6 个字符。
一个有趣的事实是,确认密码字段需要包含密码字段的确切值。 Joi 提供“const”关键字,它允许我们使用另一个值来验证。在我们的情况下,我们在“confirm_password”字段中使用“{ '$data': '1/password' }”来引用“password”字段的值。
验证传入的请求
现在我们已经定义了我们的数据结构,我们需要在路由之前使用 Joi 对数据进行验证。在 Fastify 中,我们可以使用中间件来预处理请求数据。
在我们的情况下,我们需要使用 fastify-joi 插件。此插件自动在请求体中查找数据结构,并使用 Joi 执行验证。我们可以编写以下代码在 Fastify 应用程序中使用该插件:
// www.javascriptcn.com code example
const fastify = require('fastify')()
const registerSchema = {
body: {
type: 'object',
required: ['name', 'email', 'password', 'confirm_password'],
properties: {
name: { type: 'string' },
email: { type: 'string', format: 'email' },
password: { type: 'string', minLength: 6 },
confirm_password: { const: { '$data': '1/password' } },
}
}
}
fastify.register(require('fastify-joi'), { schema: registerSchema })
fastify.post('/register', async (request, reply) => {
return { result: 'success' }
})
fastify.listen(3000, (err, address) => {
if (err) throw err
console.log(`server listening on ${address}`)
})在这个例子中,我们使用了 fastify-joi 插件,并将我们之前编写的数据结构传递给它。现在,我们的应用程序已经可以验证我们期望的数据结构。
指导意义
以上是一个前端类的关于使用 Fastify 和 Joi 进行请求验证的完整指南,其中包含了详细的教程和示例代码。使用 Joi 的验证和 Fastify 服务器,你可以很容易地在你的应用程序中高效验证数据。同时保证程序的安全性,保护用户数据。这篇文章对打算开发 web 应用程序的人特别有指导意义。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cff4d8e46428fe9ec510d0