背景
Hapi 是基于 Node.js 的企业级 Web 应用框架,提供了一系列插件和工具,使得开发者可以快速搭建 Web 应用。Hapi-Swagger 是 Hapi 的一个插件,它可以自动生成 API 文档并提供 Swagger UI 的可视化界面,方便开发和测试。
但是,在使用 Hapi-Swagger 插件时,我们有可能会遇到一个参数类型读取错误的问题。例如,我们在定义路由的时候,通过 config.validate
来验证请求参数的类型,如下所示:
-- -------------------- ---- ------- - ------- ------- ----- --------- ------- - --------- - -------- - ----- ------------------------ ---- ----------------------- - - -- -------- --------- -- -- - -- --- - -
当我们启用 Hapi-Swagger 插件并访问 Swagger UI 界面时,会发现请求参数的类型不正确,如下所示:
实际上,这是因为 Hapi-Swagger 插件默认使用的是 inert 插件来处理静态文件,而 inert 插件会将请求体作为文件读取并解压,因此导致参数类型读取错误。
解决方案
要解决参数类型读取错误的问题,我们可以使用 hapi-swaggered 插件,它是对 Hapi-Swagger 插件的增强版,可以完美兼容 Hapi 的验证机制,并且支持将请求体转为 application/json
格式,从而避免了参数类型读取错误的问题。
以下是使用 hapi-swaggered 插件来定义路由的示例代码:
-- -------------------- ---- ------- - ------- ------- ----- --------- ------- - ------------ ------- - --- ------ ------ --------- ---- --- ----- ----- -------- --------- - -------- - ----- ------------------------ ---- ----------------------- - -- -------- -------- --------- ------ - -- --- - - -
其中,我们需要将 config.validate
改为 validate
,并添加其他的描述信息,如 description
、 notes
和 tags
等,这些信息都会被用于自动生成 API 文档。
同时,我们还需要在 server.register
方法中引入 hapi-swaggered 插件,如下所示:
-- -------------------- ---- ------- ----- ------------- - -------------------------- ----- --------------- - ----------------------------- ----------------- - --------- -------------- -------- - ----- - ---- --- ---- -- ----- - ------ ---- --------------- ------------ --- --- -------------- - - -- - --------- ---------------- -------- - ----- -------- ------ ---- --------------- --------------- - ------------- ---- - - - -- ----- -- - -- ----- - --------------------- -- ---- --------- ----- - ---
其中,我们需要将 register
方法的参数改为一个数组,包含了 hapi-swaggered 和 hapi-swaggered-ui 两个插件。在 hapi-swaggered 插件中,我们可以配置 tags
和 info
等参数,用于生成 API 文档。在 hapi-swaggered-ui 插件中,我们需要指定 Swagger UI 的访问路径 path
和页面标题 title
,同时设置 validatorUrl
为 null
,以避免在 Swagger UI 页面中出现请求参数类型读取错误的提示。
总结
Hapi-Swagger 是一款非常方便的 API 文档自动生成工具,但是在使用它的过程中,我们可能会遇到参数类型读取错误的问题。为了解决这个问题,我们可以使用 hapi-swaggered 插件来完美兼容 Hapi 的验证机制,并支持将请求体转为 application/json
格式,从而解决参数类型读取错误的问题。同时,我们还可以通过 hapi-swaggered 和 hapi-swaggered-ui 插件来自动生成完整的 API 文档。
示例代码:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- --- - --------------- ----- ------------- - -------------------------- ----- --------------- - ----------------------------- ----- ------ - ------------- ----- ----- ----- ----------- --- -------------- ------- ------- ----- --------- ------- - ------------ ------- - --- ------ ------ --------- ---- --- ----- ----- -------- --------- - -------- - ----- ------------------------ ---- ----------------------- - -- -------- -------- --------- ------ - -- --- - - --- ----------------- - --------- -------------- -------- - ----- - ---- --- ---- -- ----- - ------ ---- --------------- ------------ --- --- -------------- - - -- - --------- ---------------- -------- - ----- -------- ------ ---- --------------- --------------- - ------------- ---- - - - -- ----- -- - -- ----- - --------------------- -- ---- --------- ----- - --- ------------------ -- - -- ----- - ----- ---- - ------------------- ------- -- --------------------- ---
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648d6c8d48841e9894bb95dd