基本概念
什么是 Hapi?
Hapi 是一个用于构建 Web 应用程序和服务的 Node.js 开发框架。它提供了一组强大的工具和库,使开发人员可以快速构建高质量的 Web 应用程序和 API。
Hapi 的特点
- 路由配置灵活,支持参数验证和路由的参数化设置;
- 插件系统强大,易于扩展;
- 配置选项多样性,支持插件级别、服务器级别和应用级别的配置;
- 有完善的文档和社区支持;
- 可以轻松处理 HTTP 2.0 和 WebSocket。
安装
你可以通过 npm 安装 hapi:
npm install hapi --save
创建第一个 Hapi 应用程序
首先,我们需要使用 Node.js 的 require 函数将 Hapi 模块加载到我们的程序中。然后,我们通过调用 Hapi.server 函数来创建一个 Hapi 服务器实例。
const Hapi = require('hapi'); const server = new Hapi.Server({ port: 3000, host: 'localhost' });
在添加业务逻辑之前,我们可以简单地设置路由和处理函数,以捕获请求并给出响应。
server.route({ method: 'GET', path: '/', handler: function (request, h) { return 'Hello, Hapi!'; } });
最后,我们需要启动服务器,从而等待客户端连接。
server.start();
完整代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- -------------- ------- ------ ----- ---- -------- -------- --------- -- - ------ ------- ------- - --- ----- -------- ------------- - --- - ----- --------------- - ----- ----- - ------------------- ----- ---------------- - ------------------ ------- ------- --- --------------------- - --------------
路由
路由的基本设置
在 Hapi 中,路由是由 HTTP 方法、路径和处理函数组成的。通过 Hapi 的路由配置,可以轻松地定义路由。以下是路由的基本设置。
{ method: 'GET', path: '/hello', handler: function (request, h) { return 'Hello, world!'; } }
使用参数
在 Hapi 中,可以使用路由参数捕获 URL 中的变量。
{ method: 'GET', path: '/hello/{name}', handler: function (request, h) { return `Hello, ${encodeURIComponent(request.params.name)}!`; } }
使用查询参数
在 Hapi 中,可以使用查询字符串参数来过滤请求。
{ method: 'GET', path: '/books', handler: function (request, h) { const {category, author} = request.query; // 获取 category 和 author 查询参数的值 } }
路由验证
在 Hapi 中,可以通过在路由中添加配置对象来实现路由验证。以下是路由验证的一个例子:
-- -------------------- ---- ------- - ------- ------ ----- -------------- ------- - --------- - ------- ------------ --- ----------------------------- -- -- -------- -------- --------- -- - ------ -- ---- ---- --- -- - - ----------------- - - --- ----------- - - -
这个路由会验证 id
参数是否为数字和整数,并且是大于等于 1 的。
统一的错误处理
在 Hapi 中,可以通过添加统一的错误处理程序来处理所有路由中的错误。
-- -------------------- ---- ------- --------------------------- -------- --------- -- - ----- -------- - ----------------- -- ----------------- - ----- ---- - --------- ----- ----- - -------------------- ----- ---------- - ----------------- ----- ------- - -------------- ------ --------------- ------------ --------------------------- - ------ ----------- ---
在上面的代码中,我们使用 server.ext()
方法定义一个在 PreResponse 生命周期事件中运行的扩展,为所有的错误响应添加了一个处理程序。
插件
Hapi 插件是 Hapi 中的可重用代码块。插件可用于封装常见功能,如身份验证、缓存、发送邮件等,并在多个应用程序之间共享。以下是如何在 Hapi 中使用插件的例子:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ---- - ---------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- -- ---- ----- -------- ----------------- - --- - -- ------ ----- ----------------- ----------------- ----------------- --- -------------- -------- - ---- -------------- -- ----- -------------------- --------- --------------- - ------- ---- - --- -------------- ------- ------ ----- ---- -------- ----- -------- --------- ------ - -- -- --- -- ------ --------------------- - --- -- ---------- -------------- ------- ------ ----- ------------------- -------- - ---------- - ----- -------------------- --------- - - --- - ----- ----- - ------------------- ---------------- - -
在上述示例中,我们使用了 inert 和 vision 插件,在 Hapi 应用程序中添加了静态文件和模板渲染功能。
结论
在本文中,我们学习了如何使用 Hapi 框架构建 Web 应用程序和 API。我们还学习了 Hapi 的路由、插件和验证等基本概念。通过此章节的介绍,希望可以使读者对 Hapi 框架有一个基本的了解,能够在项目中使用 Hapi 轻松构建可靠的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670bb31166ef9cf37fab5461