在前端开发中,经常需要与后端开发人员协作开发接口。为了更好地管理和维护这些接口,需要封装好的API,提供给团队中的其他开发人员使用。
本文将介绍如何基于 Hapi 框架进行 API 封装,包括路由配置、校验和响应处理等。通过具体实例的分析,您将学习到如何更好地组织和管理 API。
准备工作
首先,您需要安装 Hapi 框架。可以在 官网 查看具体的安装和使用方式。在安装完成后,创建一个新项目。
在项目中,您需要安装以下依赖:
npm install joi @hapi/hapi @hapi/boom
其中,joi
用于参数校验,@hapi/hapi
是 Hapi 的核心模块,@hapi/boom
用于在出现错误时返回错误信息。
路由
在 Hapi 中,所有路由都需要在服务器启动前进行声明。路由由路径(route)、方法(method)、处理程序(handler)和其他的一些参数组成,其中处理程序是请求到达时要执行的函数。
下面展示一个基本的路由示例:
server.route({ method: 'GET', path: '/hello', handler: (request, h) => { return 'Hello World!'; } });
这个路由定义了路径 /hello
和方法 GET
,当请求到达时,返回响应 Hello World!
。在实际开发中,我们需要定义更多的路由。因此,我们需要更好地组织和管理路由。
分离路由
针对不同的功能,我们可以将路由分离到不同的文件中,减少单个文件的代码量,更易于管理和维护。假设我们的 API 包括用户路由、订单路由和商品路由,我们可以按照这个结构进行组织:
src/ ├── routes/ │ ├── user.js │ ├── order.js │ └── product.js └── app.js
在 user.js
文件中,我们可以声明用户相关的路由:
-- -------------------- ---- ------- ----- ---- - ---------------------- -------------- - ---------------- - -- ------ -------------- ------- ------ ----- --------- -------- ----- --------- -- -- - ----- ----- - ----- ---------------- ------ ------ - --- -- ----- -------------- ------- ------- ----- --------- -------- ----- --------- -- -- - ----- ---------------------------- ------ ----------------------- - --- -- ------ -------------- ------- ------ ----- -------------- -------- ----- --------- -- -- - ----- ---- - ----- --------------------------------- -- ------- - ------ ------------------- --- -------- - ------ ----- - --- -
在 order.js
文件中,我们可以声明订单相关的路由:
-- -------------------- ---- ------- ----- ---- - ---------------------- -------------- - ---------------- - -- ------ -------------- ------- ------ ----- ---------- -------- ----- --------- -- -- - ----- ------ - ----- ----------------- ------ ------- - --- -- ----- -------------- ------- ------- ----- ---------- -------- ----- --------- -- -- - ----- ----------------------------- ------ ----------------------- - --- -- ------ -------------- ------- ------ ----- --------------- -------- ----- --------- -- -- - ----- ----- - ----- ---------------------------------- -- -------- - ------ -------------------- --- -------- - ------ ------ - --- -
在 product.js
文件中,我们可以声明商品相关的路由:
-- -------------------- ---- ------- ----- ---- - ---------------------- -------------- - ---------------- - -- ------ -------------- ------- ------ ----- ------------ -------- ----- --------- -- -- - ----- -------- - ----- ------------------- ------ --------- - --- -- ----- -------------- ------- ------- ----- ------------ -------- ----- --------- -- -- - ----- ------------------------------- ------ ----------------------- - --- -- ------ -------------- ------- ------ ----- ----------------- -------- ----- --------- -- -- - ----- ------- - ----- ------------------------------------ -- ---------- - ------ ---------------------- --- -------- - ------ -------- - --- -
参数校验
在实际开发中,我们需要校验请求中的参数是否符合规范。为了解决这个问题,我们可以使用 joi
模块。joi
提供了一种定义规范的方式,并可以将它们应用于任何 JavaScript 对象。
下面展示一个校验请求参数的路由示例:
-- -------------------- ---- ------- -------------- ------- ------- ----- --------- -------- - --------- - -------- ------------ ---------- ------------------------ --------- ------------------------ ---- ---------------------------------------- ------ --------------------- --------- ------------------------ ------------------------------- ---------------- -------------------- ------------ ------------------------ ---------- ------------------------------------------- ----- ------------ -- -- -------- ----- --------- -- -- - ----- ---------------------------- ------ ----------------------- - - ---
在这个路由中,我们定义了一个对象模式来校验请求的数据。其中:
Joi.string()
表示参数必须为字符串类型;Joi.number()
表示参数必须为数字类型;Joi.alphanum()
表示必须为字符和数字的组合;Joi.string().email()
表示必须符合邮箱格式;Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$'))
表示必须符合正则表达式的要求;Joi.object()
表示参数必须为对象类型;Joi.ref('password')
表示必须与password
参数相同;Joi.number().integer().min(1900).max(2013)
表示必须为整数类型且在指定的范围内。
错误处理
为了在出现错误时返回更加明确的错误信息,我们可以使用 @hapi/boom
模块。@hapi/boom
可以帮助我们封装错误信息,并将它们返回给客户端。
下面展示一个处理错误的路由示例:
-- -------------------- ---- ------- -------------- ------- ------ ----- -------------- -------- ----- --------- -- -- - ----- ---- - ----- --------------------------------- -- ------- - ------ ------------------- --- -------- - ------ ----- - ---
在这个路由中,我们使用了 Boom.notFound
来封装错误信息,并将它们返回给客户端。除了 notFound
,@hapi/boom
还提供了其他的函数来封装错误信息。
总结
在这篇文章中,我们介绍了如何基于 Hapi 框架进行 API 封装,包括路由配置、参数校验和错误处理。通过具体实例的分析,您学习到了如何更好地组织和管理 API。
在实际开发中,我们可以将路由分离到不同的文件中,并且根据需要进行参数校验和错误处理,从而更好地管理和维护 API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646d74e3968c7c53b0c2131b