Hapi.js 与 PostgreSQL 的集成技术教程

前言

在现代互联网应用中,前端和后端都必不可少。而前端工程师也要掌握一定的后端技能,才能更好地协同开发。本文将介绍如何使用 Hapi.js 和 PostgreSQL 创建一个集合的 Web 应用。通过本文的学习,可以更好地理解前端和后端的协同工作。

Hapi.js 简介

Hapi.js 是一个用于构建 Web 应用程序的框架。它建立在 Node.js 上并使用可插拔模块系统,使开发人员可以使用各种插件。此外,Hapi.js 还内置了有用的功能,例如路由、输入验证和缓存管理,可以大大简化 Web 应用程序的开发。

PostgreSQL 简介

PostgreSQL 是一种开源关系型数据库管理系统,它被广泛用于 Web 应用程序的数据存储和管理。与 MySQL 不同,PostgreSQL 支持许多高级特性,例如事务和多版本并发控制(MVCC)。这使得 PostgreSQL 在应用程序需要高性能、高容错性和数据完整性的情况下得以广泛使用。

Hapi.js 与 PostgreSQL 的集成

下面将介绍如何使用 Hapi.js 和 PostgreSQL 设置 Web 应用程序,并使用 Sequelize 实现 ORM。以下是本教程的目标:

  • 使用 Hapi.js 创建 Web 服务器
  • 使用 PostgreSQL 创建数据库
  • 使用 Sequelize 设计数据库模型
  • 将 Sequelize 与 PostgreSQL 集成
  • 在 Hapi.js 应用程序中使用 Sequelize

使用 Hapi.js 创建 Web 服务器

首先,我们需要安装 Hapi.js 和一些其他依赖项,例如 dotenv 和 joi:

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

接下来,创建一个新的 server.js 文件并添加以下代码:

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

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

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

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

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

-------

这个文件是我们的应用程序的入口点。我们在其中使用 dotenv 和 joi 库。dotenv 是一个 npm 包,用于从 .env 文件中读取环境变量,并将其放入 Node.js 的环境变量中。这样做的好处是,我们可以将敏感信息,例如数据库密码,存储在 .env 文件中,而不必将它们直接存储在代码库中。

我们还使用 joi 库,它允许我们定义和验证输入数据的结构。我们将在后面的代码中看到 joi 的使用方式。

注意,在上面的代码中,我们创建了一个名为 server 的 Hapi 服务器对象。我们还定义了服务器默认端口和主机。如果未定义端口和主机,则默认使用端口号 3000 和本地主机。在启动服务器之前,我们还定义了一个 init 函数,该函数在服务器启动时被调用。我们在这个函数中打印一条消息,表示服务器已正在运行。

最后,我们还允许捕获未处理拒绝事件,以防止服务器发送未处理的错误消息。

使用 PostgreSQL 创建数据库

接下来,我们将创建一个名为 hapidemo 的 PostgreSQL 数据库。在本教程中,我们将使用 PostgreSQL 作为我们的默认数据库。我们可以使用以下命令在我们的本地计算机上安装和运行 PostgreSQL:

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

在安装和启动完毕后,我们需要用以下命令进入 PostgreSQL 控制台:

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

在控制台里面创建数据库:

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

创建完成后,我们可以使用以下命令退出 PostgreSQL 控制台:

--

使用 Sequelize 设计数据库模型

数据模型是我们在数据库中存储数据的方式。在 Hapi.js 应用程序中,我们可以使用 Sequelize 库来创建数据模型。Sequelize 是一个 ORM(对象关系映射),它使我们能够使用 JavaScript 对象来描述数据库表。Sequelize 将这些对象自动映射到数据库表中的列,从而简化了数据库访问。

首先,我们需要安装 Sequelize 和一些其他依赖项:

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

我们可以看到,我们还安装了 pg 包。它是一个 PostgreSQL 驱动程序,Sequelize 使用它来与 PostgreSQL 进行通信。

接下来,我们来定义一个 Todo 数据模型。在 server.js 文件前面添加以下代码:

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

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

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

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

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

在上面的代码中,我们首先实例化了一个 Sequelize 对象,该对象与 PostgreSQL 数据库通信。我们还定义了一个名为 Todo 的模型,该模型将作为我们应用程序中的“TODO”列表。 Todo 的模型定义为:

  • id:一个自增长的整数,用作主键
  • title:一个必填字符串,用作 Todo 的标题。
  • completed:一个布尔值,用于表示签入 Todo 是否已经完成。

Sequelize 将自动创建名为 todos 的表,并在其中存储 Todo 模型。

最后,我们调用 sync 函数,该函数将在数据库中创建名为 todo 的表。如果该表已经存在,则 sync 不执行任何操作。我们还将 Todo 导出为模块,以便在我们的应用程序的其他地方使用。

将 Sequelize 与 PostgreSQL 集成

我们现在已经有了一个 Todo 数据模型,并希望将其存储在 PostgreSQL 数据库中。我们需要配置 Sequelize 与 PostgreSQL 进行通信。在 server.js 文件中添加以下代码:

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

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

在上面的代码中,我们更新之前的代码,将数据库的用户名和密码传递给 Sequelize 构造函数。我们还使用 authenticate 函数测试与数据库的连接是否正常。如果连接处于正常状态,则输出一条消息。

注意,我们还使用了 process.env.DB_USER 和 process.env.DB_PASSWORD。这些是我们为 PostgreSQL 数据库设置的环境变量。我们可以使用 .env 文件来保存它们:

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

当我们运行应用程序时,dotenv 库将从 .env 文件中加载这些环境变量。这样做可以有效地避免硬编码数据库密码。

在 Hapi.js 应用程序中使用 Sequelize

我们现在已经可以使用 Sequelize 和 PostgreSQL 存储 Todo 数据。接下来,我们需要将 Todo 存储在我们的应用程序中。

在 server.js 文件中添加以下代码:

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

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

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

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

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

在上面的代码中,我们创建了四个路由:

  • /todos:将返回所有 Todo 存储在我们的数据库中。
  • /todos(POST):将接受一个包含 Todo 标题的请求荷载,并将新 Todo 存储在我们的数据库中。
  • /todos/{id}(PUT):将接受一个包含 Todo 标题和完成状态的请求荷载,并将更新给定 ID 的 Todo。
  • /todos/{id}(DELETE):将删除给定 ID 的 Todo。

现在,我们已经准备好运行我们的应用程序。输入下列代码:

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

打开浏览器,访问 http://localhost:3000/todos ,您将看到空数组。运行curl命令,可以在控制台看到详细信息:

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

重新访问 http://localhost:3000/todos 链接,您将看到 Toy model 项目已经被添加进入了列表中。

总结

在本教程中,我们介绍了如何使用 Hapi.js 与 PostgreSQL 集成。我们学习了如何使用 Sequelize 来定义数据模型,如何将其与 PostgreSQL 集成,以及如何在 Hapi.js 应用程序中使用它。

此外,我们还介绍了如何使用环境变量以安全的方式存储敏感信息,例如数据库密码。我们还讨论了测试数据库连接的方法。希望这篇文章对初学者有所帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64c269ae83d39b488166aa04


猜你喜欢

  • # ECMAScript 2015 中的 let 和 var 关键字的区别及应用

    ECMAScript 2015 中的 let 和 var 关键字的区别及应用 在日常的 JavaScript 开发中,我们常常使用 let 和 var 关键字来声明变量。

    1 年前
  • AngularJS 中的 ng-click 事件及使用方法

    随着前端技术的发展,AngularJS 已成为广大前端开发者的首选框架之一。其中,ng-click 事件是 AngularJS 中经常使用的一种事件。本文将探讨 ng-click 事件的使用方法、机制...

    1 年前
  • Mocha 测试框架中使用 assert.js 的方法简介

    Mocha 是一款前端测试框架,它的强大之处在于可以与各种各样的断言库进行配合使用。assert.js 是 Node.js 中内置的断言库,对于初学者来说非常适合,而且其语法简单、易学易用。

    1 年前
  • 响应式设计的跳转操作规范

    随着移动设备越来越普及和设备屏幕的多样化,响应式设计已经成为了网站建设的必要条件。然而,跳转操作在不同的设备屏幕下会呈现出不同的效果,因此需要注意响应式设计下的跳转操作规范以保证用户体验。

    1 年前
  • 在 Hapi.js 应用中使用 MySQL 遇到的问题及解决方案

    背景 在开发 Hapi.js 应用时,通常需要使用数据库来存储数据。MySQL 是一种常用的关系型数据库,但在 Hapi.js 应用中使用 MySQL 时,可能会遇到以下问题: 如何连接 MySQL...

    1 年前
  • React 性能优化:如何避免不必要的 re-render

    React 是一款非常流行的前端框架,但是由于其特殊的虚拟 DOM 更新机制,有时候会出现不必要的渲染导致性能下降的问题。本文将介绍一些避免不必要的 re-render 的技巧。

    1 年前
  • SASS 中如何实现模块化 CSS 设计

    Sass 中如何实现模块化 CSS 设计 CSS 是网页设计中必不可少的一部分,但是它又常常与复杂的 HTML 结构挂钩,导致样式表的可读性、可维护性和可复用性降低。

    1 年前
  • Headless CMS 在网站数据分析与挖掘中的应用

    随着互联网的发展,人们喜欢浏览网站以获取信息或购物,而网站的管理者需要更加专注于网站的数据管理。Headless CMS(无头内容管理系统)成为近年来的热门话题,因为它可以帮助开发人员构建更灵活的网站...

    1 年前
  • MongoDB 中的数据访问控制及如何指定权限

    简介 MongoDB 是一个流行的非关系型数据库管理系统,它广泛应用于 Web 开发和移动应用程序中。在开发过程中需要注意数据的安全性和隐私保护,这就需要对 MongoDB 进行合理的访问控制和权限设...

    1 年前
  • ECMAScript 2017 中的 Object.getOwnPropertySymbols:什么是 symbols?

    在 ECMAScript2015 中,symbols 出现了。该类型是用于创建私有类成员的新型基本数据类型。它们是一种不可变的类型,可以被用作对象属性的键。尽管许多人已经熟悉了 symbols,但 O...

    1 年前
  • 在 Vue.js 中使用 mixins 实现组件复用

    Vue.js 是一个流行的 JavaScript 框架,具有响应式和组件化的特性,使得开发者可以快速开发出高质量的应用程序。在 Vue.js 中复用组件是非常重要和必要的,因此 Vue.js 提供了 ...

    1 年前
  • ECMAScript 2016:如何利用拼音搜索 EaseJS 文档?

    在前端开发中,我们经常需要查阅 API 文档来解决问题或获取新知识。作为 JavaScript 的一种常用库,EaseJS 提供了丰富的 API,但是中文文档上的英文单词和方法名,有时很难准确记住,这...

    1 年前
  • CSS Reset 在网站架构设计中的运用

    什么是 CSS Reset? CSS Reset 是一组 CSS 样式规则代码片段,用于规范化 Web 页面在不同浏览器和平台上的默认样式和行为。这些默认样式和行为可能会影响你的布局和设计,因此 CS...

    1 年前
  • 省区公交无障碍导览系统设计与实现

    随着社会的发展和人们生活品质的提高,公交系统越来越重要,而无障碍导览系统作为公交系统的重要组成部分,也越来越受到关注。本文将介绍一个基于前端技术的省区公交无障碍导览系统的设计与实现,为希望开发类似系统...

    1 年前
  • Node.js 使用 WebSocket 技术构建实时应用

    随着互联网的发展,实时通信变得越来越重要。在 Web 应用程序中,实时通信使用 WebSocket 技术已成为一种主流解决方案。 Node.js 提供了一个强大的 WebSocket 库,可以帮助开发...

    1 年前
  • RxJS 中的 mergeScan 操作符的适用场景及使用技巧

    RxJS(Reactive Extensions for JavaScript)是针对异步编程的 JavaScript 库,它提供了丰富的操作符来处理数据流。其中,mergeScan 操作符是处理数据...

    1 年前
  • 在 VS Code 中使用 ESLint 插件进行代码优化

    前言 ESLint 是一个开源的 JavaScript 代码检查工具,可以用来检查 JavaScript 代码中存在的问题,并提供相应的解决方案。它可以根据用户自定义的规则,对 JS 代码进行静态分析...

    1 年前
  • Express.js 框架中如何使用模板引擎

    前言 在 Web 开发过程中,我们需要使用模板引擎来快速生成动态的 HTML 页面。在 Express.js 框架中,我们可以使用许多流行的模板引擎来实现这一点,例如 EJS、Pug、Handleba...

    1 年前
  • Redis 持久化问题解决指南

    概述 Redis是一个开源的内存数据结构存储系统,其主要优势在于快速读写、支持多种数据结构、数据持久化等特点。在使用Redis时,数据持久化是一个非常重要的问题,因为Redis是一个内存存储系统,如果...

    1 年前
  • Next.js 页面调试:关于调试花絮的探讨

    引言 在开发过程中,调试是我们不可避免的流程。尤其在前端开发中,由于各种原因,我们需要花费更多的时间来调试页面。在这篇文章中,我们将深入探讨前端调试的本质,详细讲解 Next.js 页面调试的方法以及...

    1 年前

相关推荐

    暂无文章