解决 Fastify 运行时报错:Invalid schema error

阅读时长 4 分钟读完

Fastify 是一个基于 Node.js 的 WEB 框架,它支持快速构建高性能的 WEB 应用程序。在使用 Fastify 开发应用程序时,有时候会遇到“Invalid schema error”的错误。本文将介绍如何解决这种常见的错误。

问题背景

在 Fastify 开发过程中,我们经常使用 fastify-plugin 来扩展 Fastify 的功能,例如使用 Swagger 插件来生成 API 文档。

假设我们使用了以下代码启用 Swagger 插件:

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

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

然后,我们启动应用程序,运行一切顺利。但是,如果在运行时更改 swagger 配置:

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

然后,我们再次启动应用程序,就会遇到以下错误:

这就是“Invalid schema error”的错误。

问题原因

错误消息指出,Swagger 插件的配置缺少必需的属性 'swagger'。这是因为 Fastify 使用 fast-json-schema 库来验证插件配置对象,以确保必要的属性存在,正确的类型,并通过了其他验证规则。

在 Fastify 运行时,fastify-plugin 会尝试对插件配置对象执行 JSON 模式验证(JSON Schema Validation),并在失败时抛出此错误。

解决方法

要解决这个问题,可以采用以下两种方法:

方法一:添加 swagger 属性

在 swagger 配置对象中添加 'swagger' 属性,示例如下:

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

方法二:禁用模式验证

这个错误在插件配置中有可能并不是必要的,如果你肯定自己的配置是正确的,那么可以通过禁用模式验证来解决这个问题。我们可以将 fastify-plugin 的配置选项中的 validate 属性设置为 false 来禁用验证。

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

总结

在 Fastify 开发过程中,我们有时会遇到“Invalid schema error”这样的错误。这是因为 Fastify 使用 fast-json-schema 进行验证,以确保插件配置对象满足 JSON 模式规则。要解决这个错误,可以添加缺少的属性或禁用验证。这个错误并不难解决,但是需要我们有深入的学习和理解。同时,我们也要注意插件配置对象的属性和类型,以防止这种错误的发生。

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

纠错
反馈