实际开发中,常常需要对客户端请求中携带的数据进行验证,以确保数据的合法性。Fastify 这个 Node.js 的 Web 框架提供了一套非常方便的验证请求体和请求参数的机制,可以帮助我们快速实现服务端的验证逻辑。
在 Fastify 中,我们可以通过使用 fastify-json-schema 插件来进行请求体和请求参数的验证。这个插件依赖于 ajv 数据验证库,因此我们需要安装一个额外的包来管理 JSON schema。
在请求体中验证
我们可以使用 bodyParser
插件解析请求体,然后使用 fastify-json-schema
插件来验证请求体的数据是否符合我们定义的 JSON schema。 首先,我们需要在项目中安装这两个插件:
npm i --save fastify fastify-json-schema fastify-sensible fast-json-stringify
在 Fastify 启动时,我们需要先注册这些插件,然后定义我们的验证规则。
-- -------------------- ---- ------- ----- ------- - -------------------- ------- ---- -- ------------------------------------------------ --------------------------------------------- ----- ------ - - ----- --------- ----------- - ----- - ----- -------- -- ---- - ----- -------- - -- --------- -------- ------- --------------------- ----- - ------------- ---- - ------- - ----- ------ - -- ----- ----- ------ -- - ----- - ----- --- - - -------- ------ - ----- --- - - - -------------------- --- -- - -- ----- ----- --- ------------------- --------- -- ----------------------- --
在这个示例中,我们定义了一个 schema
变量,它包含了一个对象,属性包括 name
和 age
两个字段,并且它们分别为字符串和数值类型。我们使用 additionalProperties
属性来禁止请求体中包含其他未定义的字段。最后,我们通过将 schema
对象传递给 fastify.post()
方法的 schema
选项来验证请求体。
如果传递的数据不符合我们定义的 JSON schema,Fastify 会自动返回一个 422 状态码和错误信息。代码示例:
$ curl localhost:3000 -H "Content-Type: application/json" -d '{"name": "John"}' {"statusCode":422,"error":"Unprocessable Entity","message":"body should have required property 'age'"}
在请求参数中验证
和在请求体中验证类似,我们可以使用 fastify-json-schema
插件来验证请求参数的有效性。 我们可以将 JSON schema 定义在路由处理程序中,并将它传递给 fastify.get()
方法的 schema
选项,示例如下:
-- -------------------- ---- ------- ----- ------ - - ------------ - ----- --------- ----------- - ----- - ----- -------- -- ------ - ----- ---------- -------- -- - -- --------------------- ----- - - ---------------- - ------ -- ----- ----- ------ -- - ----- - ----- ----- - - --------- -- --- --
这个 JSON schema 验证了请求参数中是否包含 name
和 limit
字段,其中 name
字段必须为字符串类型,而 limit
字段必须是一个小于等于 50 的整数。使用 additionalProperties
属性禁止请求参数中包含其他未定义的字段。如果传递的数据不符合我们定义的 JSON schema,Fastify 会自动返回一个 422 状态码和错误信息。
$ curl localhost:3000?name=John&limit=100 {"statusCode":422,"error":"Unprocessable Entity","message":"querystring.limit should be <= 50"}
总结
在本文中,我们介绍了 Fastify 提供的请求体和请求参数验证机制,这个功能非常方便,可以帮助我们快速实现服务端验证逻辑。我们可以通过 Fastify 的插件 fastify-json-schema
来定义 JSON schema,并且通过将 schema
对象传递给 fastify.post()
和 fastify.get()
方法的 schema
选项来验证请求体和请求参数。这种验证机制确保了数据的安全性,使我们的 Web 应用程序更加可靠。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f984f7f6b2d6eab3102891