在 Web 开发中,前端前端工程师不可避免地需要与后端接口进行数据交互。为了方便地开发和管理后端接口,我们通常会使用一个称为“RESTful API”的规范。而在 Node.js 中,我们可以通过 hapi
框架来搭建 RESTful API 服务。本文将介绍 @envage/hapi-pg-rest-api
这个 npm 包,它可以帮助我们更方便地搭建基于 PostgreSQL 的 RESTful API 服务。
功能简介
@envage/hapi-pg-rest-api
基于 hapi
框架,并提供了以下优秀的特性:
- 支持 RESTful API 的所有 HTTP 方法(包括 GET、POST、PUT、PATCH 和 DELETE);
- 自动化的 CRUD 操作支持,包括建表、数据写入、数据查询、数据修改、数据删除等;
- 内置了
pg-promise
和joi
这两个流行的 npm 包,以便于在项目中更快捷和安全地使用 PostgreSQL 数据库; - 可自定义数据模型和模式,支持自定义其他
hapi
插件。
安装和设置
首先,我们需要确保环境中已经安装了 PostgreSQL 数据库和 Node.js 运行时环境。然后我们通过 npm 来安装 @envage/hapi-pg-rest-api
:
npm install --save @envage/hapi-pg-rest-api
@envage/hapi-pg-rest-api
已经把所需的 pg-promise
和 joi
包打入了自己的模块,所以我们不需要再额外安装这两个 npm 包。
在代码中引入 @envage/hapi-pg-rest-api
之后,我们就可以开始使用它了。首先,我们需要建立一个 PostgreSQL 数据库,然后创建一个 pg-promise
实例并连接到数据库:
const pgp = require('pg-promise')(); const db = pgp('postgres://username:password@host:port/database_name');
我们可以使用 PostgreSQL 提供的 psql 命令行工具来创建数据库和用户,在 pg-promise
的连接 URL 中填入数据库的连接信息。
接着,我们来使用 @envage/hapi-pg-rest-api
来创建一个 RESTful API 服务。我们需要做的第一件事情是创建一个 Plugin
实例:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------------------------------ ----- ------ - --- -------------- ------------------- ----- ------------ ----- ---- --- ------ -- -- - ----- ----------------- --------- ------- -------- - -- - --- ----- --------------- -----
在上面的代码中,我们使用 async/await
异步编程,异步地注册 @envage/hapi-pg-rest-api
插件,然后启动 RESTful API 服务。参数 options
是一个选项对象,其中与 pg-promise
相关的参数被传递给了 @envage/hapi-pg-rest-api
,例如:
database
:数据库名;username
:数据库用户名;password
:数据库密码。
在你的浏览器中打开 http://localhost:3000/docs
可以看到路由文档。
使用样例
下面以一个用户(User)信息的案例为例,演示 @envage/hapi-pg-rest-api
的用法。
首先,我们创建 users
表:
CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(50) UNIQUE NOT NULL, password TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() );
然后,我们可以定义 User
模型:
-- -------------------- ---- ------- ----- --- - --------------- ----- ---- - - ------- - --------- -------------------------------- ------ -------------------------------- --------- ----------------------- -- ---------- ------- -- -------------- - -----
在模型中,我们定义了 User
的字段(username
, email
, password
),以及各字段的合法性验证。同时,我们指定了 tableName: 'users'
,以便与 users
表对应。
接下来,我们就可以定义 User
的 RESTful API 接口了:
-- -------------------- ---- ------- ----- ---- - ------------------ -- --- ---- -- --- -------------- ------- ------ ----- --------- -------- - ------- - ------ -------------- - - --- -------------- ------- ------ ----- -------------- -------- - ------- - ------ -------------- - - --- -------------- ------- ------- ----- --------- -------- - ------- - ------ -------------- - - --- -------------- ------- ------ ----- -------------- -------- - ------- - ------ -------------- - - --- -------------- ------- -------- ----- -------------- -------- - ------- - ------ -------------- - - --- -------------- ------- --------- ----- -------------- -------- - ------- - ------ -------------- - - ---
在上述代码中,我们使用 server.route()
方法创建 User
的 RESTful API 路由,其中 { pgrest: { table: User.tableName } }
是 @envage/hapi-pg-rest-api
中 handler 的配置项,可以实现自动化的 CRUD 操作。
我们可以使用 Postman 等工具向 /users
接口发送 POST 请求:
{ "username": "john", "email": "john@example.com", "password": "secret" }
用 GET 方法,就可以查询 /users
接口的所有数据:
-- -------------------- ---- ------- - - ----- -- ----------- ------- -------- ------------------- ----------- --------- ------------- --------------------------- ------------- -------------------------- - -
我们可以看到,通过使用 @envage/hapi-pg-rest-api
,我们很容易地通过 RESTful API 接口来完成对 users
表数据的操作。
总结
@envage/hapi-pg-rest-api
的特性齐全,具有高度的可扩展性和灵活性。通过它,我们可以更加方便地开发、管理 RESTful API 服务,并提升了项目的开发效率。希望本文对各位前端工程师有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/85576