在前端开发中,我们经常需要对 JSON 数据进行校验,以保证数据的正确性和完整性。而 Fastify 是一个快速、低开销的 Node.js Web 框架,提供了一系列开箱即用的插件和工具,其中就包括了对 JSON 数据进行校验的插件。
Ajv 是一个高效的 JSON Schema 校验工具,它支持多种 JSON Schema 规范,通用性很高。而 Fastify 也提供了对 Ajv 的支持,可以方便地使用 Ajv 对 JSON 数据进行校验。
本文将详细介绍在 Fastify 中如何使用 Ajv 进行 JSON 数据校验,包括配置 Ajv,定义校验规则,进行校验等。同时,我们将给出一些实用的例子,帮助读者更加深入地了解这一过程,从而能够运用到实际开发中。
配置 Ajv
在使用 Ajv 进行 JSON 数据校验之前,我们需要先配置 Ajv。Fastify 通过 fastify-ajv
插件集成了 Ajv,我们可以直接使用这个插件。首先需要安装该插件:
npm install --save fastify-ajv
然后在 Fastify 的启动代码中,注册该插件:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------------------------------- - ----- ------ ---- - -------------- - ---------- ---- -- -------- - ---------------------- - - --展开代码
在上述代码中,我们配置了几个参数,其中 meta
参数设置为 false
,用于关闭 Ajv 的 $data
关键字。customOptions
中的 allErrors
和 plugins
参数分别用于开启全部错误提醒和集成 Ajv-formats。
定义校验规则
当 Ajv 已经被配置好后,就可以定义校验规则了。在 Fastify 中,可以使用 setValidatorCompiler
方法来定义编译器:
fastify.setValidatorCompiler(({ schema }) => { const ajv = fastify.ajv return ajv.compile(schema) })
上述代码中,我们定义了一个返回编译后校验函数的函数,并将其作为参数传递给 setValidatorCompiler
。其中 schema
代表我们要验证的 JSON 数据的规则,fastify.ajv
表示使用 Fastify 集成的 Ajv。
我们还可以使用 registerSchema
方法来定义 JSON Schema 规则:
-- -------------------- ---- ------- ------------------------ ---- ---------------- ----- --------- ----------- - ----- - ----- -------- -- ---- - ----- -------- - -- --------- -------- --展开代码
上述代码中,我们定义了一个 example1.json
的 JSON Schema 规则,它表示一个对象类型,包含 name
和 age
两个属性。其中 name
属性必须为字符串类型,age
属性可为数字类型。required
参数表示 name
属性为必须属性,必须出现在 JSON 数据中。
进行校验
当配置好校验规则后,就可以开始进行校验了。在 Fastify 中,可以使用 fastify.validate
方法来进行校验:
-- -------------------- ---- ------- ----------------- --------- ------ -- - ------------------ ----- - ----- ---------------- - -- -------- -- - ------------ -------- ----------- -------- -- -- ------------ -- - ------------ -------- ----------- --------- ------- ----------- -- -- --展开代码
上述代码中,我们定义了一个 POST 接口,并在其中使用 fastify.validate
方法进行校验。request.validate
接收一个校验规则对象,其中 body
表示待校验数据。在本例中,我们将其指向之前定义的 example1.json
规则。
当校验通过时,我们返回一条消息“Validation passed!”;当校验失败时,我们返回一条消息“Validation failed!”,并在其中加入错误原因。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ca85a2e46428fe9e2c56be