RESTful API 是现代 Web 应用中的一种重要的交互方式,通过对资源的操作来实现前后端之间的数据交换,而 Sequelize 作为一款成熟的 ORM 框架,则可以方便的帮助我们在 Node.js 的 web 开发中操作数据库,进而快速搭建出 RESTful API。在这篇文章中,我们将会介绍如何结合 Sequelize 和 Express 框架搭建出一个 RESTful API,并且通过一个具体的实例来演示其具体的应用方法。
前置条件
在阅读本文之前,我们需要具备一定的 Node.js 开发经验,熟悉基于 Express 框架的 Web 开发以及 MySQL 数据库的操作。同时,我们需要先安装好 Node.js 和 MySQL 数据库,并且在本地环境中预置好相关的开发工具和配置文件。
准备工作
首先,我们需要使用 Node Package Manager(或简称 npm)安装必要的相关 Node.js 依赖包。我们可以在命令终端中执行以下命令:
npm install sequelize express body-parser mysql2 -s
其中,sequelize 是一个方便 Node.js 应用中操作 MySQL 数据库的 ORM 框架(Object-Relational Mapping),而 express 和 body-parser 分别是 Node.js 的 Web 框架和处理 JSON 或者表单提交等请求体的中间件,mysql2 则是 MySQL 数据库的 Node.js 驱动程序。
接着,在 MySQL 数据库中创建一个名为 sequelize_express 的数据库(也可以根据自己的需求创建一个合适的数据库),然后创建一个名为 users 的表,其中包含两个字段:id 和 name。我们可以在 MySQL Workbench 中通过以下 SQL 语句来创建 users 表:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
初始化项目
我们可以在命令终端中执行以下命令来创建一个基于 Express 框架的项目:
express sequelize_express
然后进入 sequelize_express 目录,并将 package.json 文件中的 dependencies 配置项修改为以下内容:
"dependencies": { "body-parser": "^1.19.0", "express": "^4.17.1", "mysql2": "^2.2.5", "sequelize": "^6.6.2" }
接下来,我们需要在项目根目录中创建一个名为 models 的目录,用于存放 Sequelize 的模型定义。在 models 目录中创建一个名为 user.js 的文件,并编写以下代码:
-- -------------------- ---- ------- ----- - ---------- ------ --------- - - --------------------- ----- --------- - --- ------------------------------ ------- ----------- - ----- ------------ -------- ------- --- ----- ---- ------- ----- -- ----------- ----- - ----- ----------------- ---------- ----- - -- - ---------- ---------- ------ --- -------------- - -----
在上述代码中,我们首先引入了 Sequelize 的相关对象和方法,然后在 sequelize 实例化中传入了数据库连接时需要的相关配置,其中包括数据库名称、用户名和密码等信息。接着,我们通过定义一个 User 类来声明了 users 表的模型,设置了一个名为 name 的字段,且该字段不能为空。最后,我们将声明好的 User 类导出,以便后续在应用程序中使用。
配置路由
在项目根目录中,我们需要创建一个名为 routes 的目录,用于存放路由的定义。在 routes 目录中创建一个名为 users.js 的文件,并编写以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- ---- - -------------------------- ----- ------ - ----------------- ---------------------------------- --------- ---- ---- --------------- ----- ----- ---- -- - ----- ----- - ----- --------------- ---------------- --- ---------------- ----- ----- ---- -- - ----- - ---- - - --------- ----- ---- - ----- ------------- ---- --- --------------- --- ------------------ ----- ----- ---- -- - ----- - -- - - ----------- ----- ---- - ----- ------------------ --------------- --- ------------------ ----- ----- ---- -- - ----- - -- - - ----------- ----- - ---- - - --------- ----- ---- - ----- ------------------ ----- ------------- ---- --- --------------- --- --------------------- ----- ----- ---- -- - ----- - -- - - ----------- ----- ---- - ----- ------------------ ----- --------------- --------------- --- -------------- - -------
在上述代码中,我们首先引入了 express、body-parser 和定义好的 User 类,然后通过 express.Router() 方法创建一个路由对象,使用 bodyParser 中间件来处理 POST 和 PUT 请求中的表单参数。接着,我们定义了五个路由处理函数来对应对 users 表的不同操作,分别为通过 GET 方法获取所有用户信息,通过 POST 方法新增用户,通过 GET 方法获取指定 ID 的用户信息,通过 PUT 方法更新指定 ID 的用户信息,以及通过 DELETE 方法删除指定 ID 的用户信息。每个操作都会与相应的数据库操作相对应,并返回操作后的结果。
启动服务
我们在项目根目录下的 app.js 文件中编写以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - -------------------------- ----- --- - ---------- ----------------- ------------- ---------------- -- -- - ---------------- --------- -- ---- -------- ---
在上述代码中,我们引入了 express 框架和刚才编写好的路由对象,通过 app.use('/users', usersRouter) 来告诉应用程序使用 /users 路径下的路由操作 users 表,然后通过 app.listen() 方法来指定应用程序监听 3000 端口并启动服务。
测试应用程序
我们可以在命令终端中执行以下命令来启动应用程序:
node app.js
然后在浏览器中输入 http://localhost:3000/users,即可获取 users 表中的所有用户信息。我们还可以通过 Postman 软件或其他的 API 测试工具来对应着各个路由操作来测试我们的应用程序。
最后,当我们需要修改 users 表的结构时,只需要修改 user.js 中的模型定义即可,Sequelize 会自动与数据库同步改动。至此,我们就完成了基于 Sequelize 和 Express 框架的 RESTful API 的搭建。
总结
通过本文的介绍,我们可以了解到如何结合 Sequelize 和 Express 框架来搭建一个简单的 RESTful API,并并且通过具体的代码示例详细介绍了其相关的使用方法和技巧。通过学习本文,相信您已经能够掌握基本的 Sequelize 和 Express 框架的应用知识,同时也能够独立开发出简单的 RESTful API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648973cb48841e98947bd075