RESTful 是一种设计 Web 应用程序的架构风格,它通常基于 HTTP 协议,并使用 HTTP 动词(GET、POST、PUT、DELETE)对资源进行管理。它的特点是快速、可扩展、适应性强且易于维护。Express.js 是一个强大的 Node.js 框架,可以轻松构建出 RESTful 风格的应用程序。在本文中,我们将学习如何使用 Express.js 构建一个完整的 RESTful 风格应用程序。
环境和准备工作
在开始前,请确保你已经安装好了以下环境:
- Node.js
- npm
- MongoDB
同时,我们需要安装的一些依赖包:
- Express.js
- body-parser
- mongoose
可以使用以下命令安装:
npm install express body-parser mongoose --save
在安装完成后,我们需要创建项目目录。在该目录下创建一个 server.js
文件,作为我们应用程序的入口文件。
创建 RESTful API
RESTful 风格应用程序的核心是 API 接口。在 Express.js 中,我们可以通过创建路由来定义 API 接口。我们先创建一个 routes
目录,并在里面创建一个 api.js
文件。
在 api.js
中,我们先定义路由的基础路径:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ---------------- ---- ----- -- - ---------------- ----------- ------- --- --------------- ----- ---- -- - ------------- ------- --- -------------- - -------
该路由定义了一个基础路径 /
,并处理 GET 请求,返回 API Home
。此外,我们打印了一个日志,表示该 API 被调用。
在 server.js
中,我们加载并使用此路由:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- --------- - ------------------------ ----- --- - ---------- ----- ---- - ---------------- -- ----- ------------------------------- --------- ---- ---- --------------------------- --------------- ----------- ---------------- -- -- - ---------------- --------- -- ---- ---------- ---
现在,我们可以访问 http://localhost:3000/api
,并得到一个 API Home
的响应。
连接 MongoDB 数据库
在大多数情况下,RESTful 风格应用程序需要与数据库进行交互。在本文中,我们将使用 MongoDB 作为我们的数据库。首先,安装 mongoose
包。
npm install mongoose --save
在 server.js
中,我们定义了 MongoDB 数据库的连接:
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/restfulapp', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, 'MongoDB connection error:'));
在这里,我们通过 mongoose.connect
连接到名为 restfulapp
的 MongoDB 数据库,并在出错时打印了一个错误日志。
创建资源
在 RESTful 风格应用程序中,我们使用 HTTP 动词来操作资源。这些动词包括 GET、POST、PUT、DELETE 等。 我们将使用 mongoose
来定义和操作数据库的资源。我们先在 models
目录中创建一个 user.js
文件,该文件定义了一个用户模型,如下所示:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- ----- ---------- - --- -------- ---------- - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ----- ------- ---- -- ------------ - ----- ----- -------- -------- -- --- ----- ---- - ---------------------- ------------ -------------- - -----
这里定义了一个名为 User
的模型,该模型包含了用户的 firstName
、lastName
、email
和 dateCreated
等属性。为了保证 email 的唯一性,我们设置了该属性的 unique
属性为 true
。
定义 API 接口
现在,我们已经有了一个包含资源的数据模型。我们可以使用这些资源来定义 API 接口。在 api.js
中,我们定义了以下路由:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ----- ---- - -------------------------- ---------------- ---- ----- -- - ---------------- ----------- ------- --- ---------------------- ---------- ---- -- - --------------- ------ -- - -- ----- -------------- ---------------- --- -- ----------- ---- -- - ----- ---- - --- --------------- --------------- -- - -- ----- -------------- ---------- -------- ----- --------- --- --- --- ------------------------------- ---------- ---- -- - --------------------------------- ----- ----- -- - -- ----- -------------- --------------- --- -- ---------- ---- -- - --------------------------------- ----- ----- -- - -- ----- -------------- -------------- - ------------------- ------------- - ------------------ ---------- - --------------- --------------- -- - -- ----- -------------- ---------- -------- ----- --------- --- --- --- -- ------------- ---- -- - ------------- ---- ------------------ -- ----- -- - -- ----- -------------- ---------- -------- ------------- -------- --- --- --- -------------- - -------
该路由定义了两个 RESTful 风格的路由: /users
和 /users/:user_id
,分别对应于所有用户和单个用户的操作。其中,get()
方法获取所有用户,post()
方法创建一个新用户,get(user_id)
方法获取单个用户,put(user_id)
方法更新单个用户,delete(user_id)
方法删除单个用户。
现在,我们可以使用 POSTMAN 或 CURL 等工具来测试这些 API 接口。
总结
在本文中,我们学习了如何使用 Express.js 框架来构建 RESTful 风格的应用程序,并使用了 MongoDB 来保存和操作资源数据。我们定义了一些 RESTful API 接口,对用户资源执行 CRUD 操作。我们还学习了使用 mongoose
来定义和操作数据库的数据模型。如果您想学习更多有关 Express.js 的内容,可以查看我们的其他学习资源。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654f15207d4982a6eb81a95a