使用 Hapi.js 与 PostgreSQL 实现 Node.js 数据库操作

阅读时长 11 分钟读完

什么是 Hapi.js 和 PostgreSQL?

在介绍如何使用 Hapi.js 和 PostgreSQL 实现 Node.js 数据库操作之前,先来简单介绍一下 Hapi.js 和 PostgreSQL。

Hapi.js

Hapi.js 是一个 Node.js Web 开发框架,旨在提供可靠的、稳定的 Web 应用程序和 API 的构建工具。Hapi.js 提供了可扩展的路由、处理程序、插件架构和大量的内置插件。

PostgreSQL

PostgreSQL 是一个开源的、完全符合 ACID 的关系型数据库系统。它拥有高可靠性、高可扩展性、高性能、安全性强等优点,被广泛应用于各种规模的企业级应用程序。

如何使用 Hapi.js 和 PostgreSQL 实现 Node.js 数据库操作?

现在我们来看一下如何使用 Hapi.js 和 PostgreSQL 实现 Node.js 数据库操作。在本文中,我们将创建一个简单的 API,该 API 具有以下功能:

  • 查找指定用户 ID 的用户信息。
  • 添加用户信息。
  • 更新指定用户 ID 的用户信息。
  • 删除指定用户 ID 的用户信息。

步骤一:安装依赖

首先,我们需要安装一些依赖包。在命令行中输入以下命令:

  • hapi:用于创建 Web 应用程序。
  • pg:用于连接 PostgreSQL 数据库。
  • joi:用于验证数据。
  • nodemon:用于监视代码更改并自动重新启动服务器。

步骤二:创建数据库

接下来,我们需要在 PostgreSQL 数据库中创建一个名为“users”的表,该表具有以下列:

  • id:整数类型,主键,自动递增。
  • name:字符串类型,要求非空。
  • age:整数类型,要求非空。

可以使用以下 SQL 语句创建该表:

步骤三:初始化 Hapi.js 应用程序

现在我们开始编写代码。首先,创建一个名为“server.js”的文件,并初始化 Hapi.js 应用程序。

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

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

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

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

--------

在此代码中,我们创建了一个名为“server”的对象,该对象表示我们的应用程序。我们使用 Hapi.server() 方法初始化该对象,并指定监听的端口号。

然后,我们定义了一个名为“/”的路由,用于测试服务器是否正常运行。该路由使用 requesth 参数,并返回“Hello World!”作为响应。

最后,我们使用 start() 方法启动服务器,并在控制台日志中打印服务器 URL。

运行以下命令启动服务器:

如果一切正常,应该在控制台中看到以下消息:“Server running at: http://localhost:3000”。

步骤四:连接到 PostgreSQL 数据库

接下来,我们需要连接到 PostgreSQL 数据库。我们将使用 pg 包提供的 Pool 对象来建立连接池。

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

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

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

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

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

在此代码中,我们使用 pg 包提供的 Pool 对象创建连接池,并指定连接到的数据库和凭据。

然后,我们使用 on() 方法为连接池添加错误处理程序。如果在空闲客户端上发生预料外的错误,我们将记录该错误并终止进程。

最后,我们定义了一个名为 getUsers() 的异步方法,该方法查询“users”表中的所有行,并返回结果。

注意,在此代码中,我们调用了 console.log('PostgreSQL connected!'),以确保我们已成功连接到 PostgreSQL 数据库。

步骤五:添加路由

现在,我们已经成功连接到 PostgreSQL 数据库,并且可以查询用户的信息了。接下来,我们需要添加一些路由,允许我们执行 CRUD 操作。

  • 查找指定用户 ID 的用户信息:
-- -------------------- ---- -------
--------------
  ------- ------
  ----- --------------
  -------- ----- --------- -- -- -
    ----- - ---- - - ----- -----------
      ------- - ---- ----- ----- -- - ----
      -------------------
    --

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

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

在此代码中,我们定义了一个名为“/users/{id}”的路由,可以查找具有指定 ID 的用户信息。

首先,我们使用 $1 占位符创建了一个参数化 SQL 查询,该查询将通过 request.params.id 中的 ID 值进行筛选。然后,我们使用异步方法 pool.query() 执行查询,并将结果赋值给 rows 变量。

接下来,如果结果集的 length 属性为 0,说明没有找到符合条件的用户,我们将返回 h.response('User not found').code(404),即“用户未找到”的 404 错误响应。

否则,我们返回结果集的第一行,即具有此 ID 的用户信息。

  • 添加用户信息:
-- -------------------- ---- -------
----- ---------------- - ------------
  ----- ------------------------
  ---- ----------------------------------
---

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

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

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

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

在此代码中,我们定义了一个名为“/users”的路由,可以添加用户信息。

首先,我们使用 Joi 包创建了一个名为 createUserSchema 的对象,用于验证 nameage 字段的有效性。如果其中任何一个字段无效,我们将返回 400 错误响应。

接下来,我们从 request.payload 中获取 nameage 的值,并使用参数化 SQL 查询将它们插入到 users 表中。(注意,为了获取新插入的行,我们使用 RETURNING * 子句。)

最后,我们返回新插入的行。

  • 更新指定用户 ID 的用户信息:
-- -------------------- ---- -------
----- ---------------- - ------------
  ----- -------------
  ---- -----------------------
---

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

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

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

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

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

在此代码中,我们定义了一个名为“/users/{id}”的路由,用于更新具有指定 ID 的用户信息。

首先,我们使用 Joi 包创建了一个名为 updateUserSchema 的对象,用于验证 nameage 字段的有效性。如果其中任何一个字段无效,我们将返回 400 错误响应。

接下来,我们从 request.payload 中获取更新后的 nameage 的值,并使用参数化 SQL 查询更新 users 表中具有指定 ID 的行。

如果没有行受到更新,我们将返回 404 错误响应。否则,我们将返回受更新影响的行。

  • 删除指定用户 ID 的用户信息:
-- -------------------- ---- -------
--------------
  ------- ---------
  ----- --------------
  -------- ----- --------- -- -- -
    ----- - ---- - - ----- -----------
      ------- ---- ----- ----- -- - -- --------- ---
      -------------------
    --

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

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

在此代码中,我们定义了一个名为“/users/{id}”的路由,用于删除具有指定 ID 的用户信息。

使用参数化 SQL 查询删除 users 表中具有指定 ID 的行。如果没有行受到删除,我们将返回 404 错误响应。否则,我们将返回受删除影响的行。

步骤六:测试 API

现在,我们已经创建了 API 的基本框架,允许我们执行 CRUD 操作。我们可以使用 Postman 或类似的工具测试这些路由,并在数据库中查看结果。

例如,可以使用以下 JSON 对象测试添加用户信息:

或者,可以使用以下 JSON 对象测试更新用户信息:

或者,可以使用以下 URL 测试查找用户信息:

或者,可以使用以下 URL 测试删除用户信息:

总结

在本文中,我们使用 Hapi.js 和 PostgreSQL 创建了一个简单的 CRUD API。我们了解了如何连接到 PostgreSQL 数据库,如何使用 Hapi.js 添加路由,以及如何执行查询和写入操作。我们还了解了路由验证和错误处理的基础知识,以及如何使用 Postman 测试 API。

使用 Hapi.js 和 PostgreSQL 可以实现可靠的、稳定的 Web 应用程序和 API 的构建工具。通过使用这些工具,您可以创建出具有高可靠性、高可扩展性、高性能、安全性强等优点的企业级应用程序。

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

纠错
反馈