Fastify 中如何使用 JSON Schema 校验请求参数?

推荐答案

在 Fastify 中使用 JSON Schema 校验请求参数,可以通过在路由定义时指定 schema 属性来实现。以下是一个示例:

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

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

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

在这个示例中,我们定义了一个 POST 路由 /user,并在 schema 中指定了请求体的 JSON Schema。如果请求体不符合定义的 Schema,Fastify 会自动返回一个 400 错误响应。

本题详细解读

1. JSON Schema 的作用

JSON Schema 是一种用于描述 JSON 数据结构的标准。在 Fastify 中,JSON Schema 主要用于校验请求参数(如请求体、查询参数、路径参数等),确保它们符合预期的格式和类型。

2. 如何在 Fastify 中使用 JSON Schema

在 Fastify 中,可以通过在路由定义时指定 schema 属性来使用 JSON Schema。schema 属性可以包含以下字段:

  • body: 校验请求体。
  • query: 校验查询参数。
  • params: 校验路径参数。
  • headers: 校验请求头。

每个字段的值都是一个 JSON Schema 对象,用于描述对应参数的结构和类型。

3. 示例解析

在推荐答案的示例中,我们定义了一个 POST 路由 /user,并在 schema 中指定了 body 的 JSON Schema:

  • type: 'object' 表示请求体必须是一个对象。
  • required: ['name', 'age'] 表示请求体必须包含 nameage 两个字段。
  • properties 定义了 nameage 的类型,name 必须是字符串,age 必须是数字。

如果请求体不符合这个 Schema,Fastify 会自动返回一个 400 错误响应,并附带详细的错误信息。

4. 自定义错误响应

如果需要自定义错误响应,可以使用 Fastify 的 setErrorHandler 方法:

在这个示例中,我们捕获了所有验证错误,并返回了一个自定义的错误响应。

纠错
反馈