什么是 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 的用户信息。
步骤一:安装依赖
首先,我们需要安装一些依赖包。在命令行中输入以下命令:
npm install hapi pg joi nodemon
- hapi:用于创建 Web 应用程序。
- pg:用于连接 PostgreSQL 数据库。
- joi:用于验证数据。
- nodemon:用于监视代码更改并自动重新启动服务器。
步骤二:创建数据库
接下来,我们需要在 PostgreSQL 数据库中创建一个名为“users”的表,该表具有以下列:
- id:整数类型,主键,自动递增。
- name:字符串类型,要求非空。
- age:整数类型,要求非空。
可以使用以下 SQL 语句创建该表:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT NOT NULL );
步骤三:初始化 Hapi.js 应用程序
现在我们开始编写代码。首先,创建一个名为“server.js”的文件,并初始化 Hapi.js 应用程序。
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------- ----- ----- --- -------------- ------- ------ ----- ---- -------- --------- -- -- - ------ ------ -------- -- --- ----- ----- - ----- -- -- - ----- --------------- ------------------- ------- --- --------------------- -- --------
在此代码中,我们创建了一个名为“server”的对象,该对象表示我们的应用程序。我们使用 Hapi.server()
方法初始化该对象,并指定监听的端口号。
然后,我们定义了一个名为“/”的路由,用于测试服务器是否正常运行。该路由使用 request
和 h
参数,并返回“Hello World!”作为响应。
最后,我们使用 start()
方法启动服务器,并在控制台日志中打印服务器 URL。
运行以下命令启动服务器:
nodemon server.js
如果一切正常,应该在控制台中看到以下消息:“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
的对象,用于验证 name
和 age
字段的有效性。如果其中任何一个字段无效,我们将返回 400 错误响应。
接下来,我们从 request.payload
中获取 name
和 age
的值,并使用参数化 SQL 查询将它们插入到 users
表中。(注意,为了获取新插入的行,我们使用 RETURNING *
子句。)
最后,我们返回新插入的行。
- 更新指定用户 ID 的用户信息:
-- -------------------- ---- ------- ----- ---------------- - ------------ ----- ------------- ---- ----------------------- --- -------------- ------- ------ ----- -------------- -------- ----- --------- -- -- - ----- - ----- --- - - ---------------- ----- - ----- - - --------------------------- ----- --- --- -- ------- - ------ ----------------------------------------------- - ----- - ---- - - ----- ----------- ------- ----- --- ---- - --- --- - -- ----- -- - -- --------- --- ------ ---- ------------------ -- -- ------------ --- -- - ------ ---------------- --- ------------------ - ------ -------- -- ---
在此代码中,我们定义了一个名为“/users/{id}”的路由,用于更新具有指定 ID 的用户信息。
首先,我们使用 Joi
包创建了一个名为 updateUserSchema
的对象,用于验证 name
和 age
字段的有效性。如果其中任何一个字段无效,我们将返回 400 错误响应。
接下来,我们从 request.payload
中获取更新后的 name
和 age
的值,并使用参数化 SQL 查询更新 users
表中具有指定 ID 的行。
如果没有行受到更新,我们将返回 404 错误响应。否则,我们将返回受更新影响的行。
- 删除指定用户 ID 的用户信息:
-- -------------------- ---- ------- -------------- ------- --------- ----- -------------- -------- ----- --------- -- -- - ----- - ---- - - ----- ----------- ------- ---- ----- ----- -- - -- --------- --- ------------------- -- -- ------------ --- -- - ------ ---------------- --- ------------------ - ------ -------- -- ---
在此代码中,我们定义了一个名为“/users/{id}”的路由,用于删除具有指定 ID 的用户信息。
使用参数化 SQL 查询删除 users
表中具有指定 ID 的行。如果没有行受到删除,我们将返回 404 错误响应。否则,我们将返回受删除影响的行。
步骤六:测试 API
现在,我们已经创建了 API 的基本框架,允许我们执行 CRUD 操作。我们可以使用 Postman 或类似的工具测试这些路由,并在数据库中查看结果。
例如,可以使用以下 JSON 对象测试添加用户信息:
{ "name": "Alice", "age": 25 }
或者,可以使用以下 JSON 对象测试更新用户信息:
{ "name": "Alice", "age": 26 }
或者,可以使用以下 URL 测试查找用户信息:
http://localhost:3000/users/1
或者,可以使用以下 URL 测试删除用户信息:
http://localhost:3000/users/1
总结
在本文中,我们使用 Hapi.js 和 PostgreSQL 创建了一个简单的 CRUD API。我们了解了如何连接到 PostgreSQL 数据库,如何使用 Hapi.js 添加路由,以及如何执行查询和写入操作。我们还了解了路由验证和错误处理的基础知识,以及如何使用 Postman 测试 API。
使用 Hapi.js 和 PostgreSQL 可以实现可靠的、稳定的 Web 应用程序和 API 的构建工具。通过使用这些工具,您可以创建出具有高可靠性、高可扩展性、高性能、安全性强等优点的企业级应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6494223e48841e98941a7807