Fastify 中的请求体验证与请求参数验证

阅读时长 5 分钟读完

实际开发中,常常需要对客户端请求中携带的数据进行验证,以确保数据的合法性。Fastify 这个 Node.js 的 Web 框架提供了一套非常方便的验证请求体和请求参数的机制,可以帮助我们快速实现服务端的验证逻辑。

在 Fastify 中,我们可以通过使用 fastify-json-schema 插件来进行请求体和请求参数的验证。这个插件依赖于 ajv 数据验证库,因此我们需要安装一个额外的包来管理 JSON schema。

在请求体中验证

我们可以使用 bodyParser 插件解析请求体,然后使用 fastify-json-schema 插件来验证请求体的数据是否符合我们定义的 JSON schema。 首先,我们需要在项目中安装这两个插件:

在 Fastify 启动时,我们需要先注册这些插件,然后定义我们的验证规则。

-- -------------------- ---- -------
----- ------- - --------------------
  ------- ----
--

------------------------------------------------
---------------------------------------------

----- ------ - -
  ----- ---------
  ----------- -
    ----- - ----- -------- --
    ---- - ----- -------- -
  --
  --------- -------- -------
  --------------------- -----
-

-------------
  ----
  - ------- - ----- ------ - --
  ----- ----- ------ -- -
    ----- - ----- --- - - --------

    ------ - ----- --- -
  -
-

-------------------- --- -- -
  -- ----- ----- ---
  ------------------- --------- -- -----------------------
--

在这个示例中,我们定义了一个 schema 变量,它包含了一个对象,属性包括 nameage 两个字段,并且它们分别为字符串和数值类型。我们使用 additionalProperties 属性来禁止请求体中包含其他未定义的字段。最后,我们通过将 schema 对象传递给 fastify.post() 方法的 schema 选项来验证请求体。

如果传递的数据不符合我们定义的 JSON schema,Fastify 会自动返回一个 422 状态码和错误信息。代码示例:

在请求参数中验证

和在请求体中验证类似,我们可以使用 fastify-json-schema 插件来验证请求参数的有效性。 我们可以将 JSON schema 定义在路由处理程序中,并将它传递给 fastify.get() 方法的 schema 选项,示例如下:

-- -------------------- ---- -------
----- ------ - -
  ------------ -
    ----- ---------
    ----------- -
      ----- - ----- -------- --
      ------ - ----- ---------- -------- -- -
    --
    --------------------- -----
  -
-

---------------- - ------ -- ----- ----- ------ -- -
  ----- - ----- ----- - - ---------

  -- ---
--

这个 JSON schema 验证了请求参数中是否包含 namelimit 字段,其中 name 字段必须为字符串类型,而 limit 字段必须是一个小于等于 50 的整数。使用 additionalProperties 属性禁止请求参数中包含其他未定义的字段。如果传递的数据不符合我们定义的 JSON schema,Fastify 会自动返回一个 422 状态码和错误信息。

总结

在本文中,我们介绍了 Fastify 提供的请求体和请求参数验证机制,这个功能非常方便,可以帮助我们快速实现服务端验证逻辑。我们可以通过 Fastify 的插件 fastify-json-schema 来定义 JSON schema,并且通过将 schema 对象传递给 fastify.post()fastify.get() 方法的 schema 选项来验证请求体和请求参数。这种验证机制确保了数据的安全性,使我们的 Web 应用程序更加可靠。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f984f7f6b2d6eab3102891

纠错
反馈