怎么制作网站维护公告效果,建设银行网站上的的研究报告,广州中小企业网站制作,做网站教程pdf目录
前言
开篇语
准备工作
初始配置
创建连接池
操作数据库
封装方法
结束语 前言
开篇语
本节讲解如何使用Node.js实现与MySQL数据库的连接#xff0c;并将该过程进行函数封装。
与基础部分的语法相比#xff0c;ES6的语法进行了一些更加严谨的约束和优化#…目录
前言
开篇语
准备工作
初始配置
创建连接池
操作数据库
封装方法
结束语 前言
开篇语
本节讲解如何使用Node.js实现与MySQL数据库的连接并将该过程进行函数封装。
与基础部分的语法相比ES6的语法进行了一些更加严谨的约束和优化因此在之后使用原生JS时我们应该尽量使用ES6的语法进行代码编写。
准备工作
软件【参考版本】Visual Studio CodePostman或ApifoxNavicat Premium 16
插件扩展包Live Server
系统版本 Win10/11
提示node.js在当前文件夹下使用cmd运行不在浏览器解析运行
初始配置
当然首先我们需要进行初始化得到package.json这一步前几期已经反复提及不再赘述。
然后使用npm下载mysql包记得在生产环境下并进行导入。
我没有选择版本配置文件中显示的版本是这个—— dependencies: { mysql: ^2.18.1, nodemon: ^3.1.7 } 我这里还下载了nodemon包这样就不用编辑后反复关闭批处理程序了。
记得在scripts里面配置下面的启动语句文件名自己起省略后缀—— start: nodemon 1.连接数据库 最后在我们的 1.连接数据库.js 中导入mysql包——
// 1.导入MySQL包
const mysql require(mysql);
创建连接池
在node.js中创建一个连接池Pool用于连接指定地址下的指定数据库。
创建连接池的方法为createPool它接收一个对象该对象中有下面这些属性——
属性作用host设置连接数据库的地址port设置端口号MySQL端口号为3306user登录数据库的用户名password登录数据库的密码database使用的数据库相当于MySQL中use的数据库
这里假设我们在本地有一个名为student的数据库登录的用户名和密码这个都要自己设置好哈分别为root123456 那么就可以这么创建——
// 2.创建连接池
const pool mysql.createPool({host: 127.0.0.1,port: 3306,user: root,password: 123456,database: student
});
操作数据库
有了连接池之后我们就可以利用query()方法直接使用MySQL的语句。
比如我们想要在student下创建一张t_students表那么就可以先将建表的语句使用模板字符串保存起来——
const sql CREATE TABLE t_students (id int(11) UNSIGNED NOT NULL COMMENT 学号,name varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 姓名,age int(10) UNSIGNED NULL DEFAULT NULL COMMENT 年龄,score int(10) UNSIGNED NULL DEFAULT NULL COMMENT 分数,gender varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 男 COMMENT 性别,comedate timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 入学时间,remark text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 备注,PRIMARY KEY (id) USING BTREE) ENGINE InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT Dynamic;query()方法的形参列表为MySQL命令字符串和回调函数就像下面这样——
pool.query(sql, (error, results, fields) {})
在回调函数中error是错误信息通常由throw进行抛出而results则是数据库操作的结果。
pool.query(sql, (error, results, fields) {if (error) throw error;console.log(results);
})
至此整个连接的基本步骤已经全部完成下面在cmd中运行npm start不出意外是可以看到类似下面的成功创建信息的—— 使用Navicat Premium 16连接目标地址的数据库这里是本地打开student库就可以看到我们刚刚创建好的t_students表—— 对于其他的MySQL语句只需要替换sql字符串的内容然后效仿即可。
注意对于查询操作查询的结果是一个RowDataPacket数组的形式。 我们可以使用JSON的stringify()方法进行转化然后利用parse()方法进行解析这样就可以把结果转化成我们熟悉的JSON对象数组的形式—— 封装方法
纵观node.js操作MySQL的过程其实还是比较固定的——无非就是创建连接池和操作数据库这两步。因此我们可以将它们封装成一个方法。
首先建立一个db文件夹用于保存我们的数据库操作的js文件。connect.js用于连接池的创建tools.js用于数据库的操作。
在connect中添加下面的代码——
// 1导入mysql包
const mysql require(mysql)
// 2 创建连接池
const pool mysql.createPool({host: xxx.xxx.xxx.xxx,port: 3306,user: xxx,password: xxx,database: xxx
})module.exports pool
这里的3360是固定的而xxx需要根据使用者的不同替换成一些固定的代码比如连接地址、固定用户名密码和指定数据库。
最后使用module.exports进行匿名导出。
对于异步的数据库操作来说可以使用Promise进行封装。
query()方法的回调函数接收error和results参数对应Promise的rejected()和resolved()方法。
query()的第一个参数照例还是MySQL语句但是我们还需要在该参数和回调函数之间插入一个sqlParams参数该参数默认为空数组代表需要查询的数据。
对于查询语句来说实际上是将sql参数和sqlParams拼接起来的结果那么为什么不在sql参数中一次性传入完整的查询语句呢
这里假设我们在进行一次登录校验操作那么我们的sql参数大致是下面这样——
const sql SELECT username, password FROM table_login WHERE username admin AND password 123456其中admin和123456是用户输入的值。
看上去这个校验没有任何问题但是试想一种极端的情况假设用户在密码框输入下面的信息—— 123456 AND 1 1 那么我们的sql语句将会变成下面的样子——
const sql SELECT username, password FROM table_login WHERE username admin AND password 123456 AND 1 1这样的结果是非常危险的只要用户名输入正确那么无论密码是什么整个语句都将显示为可以查询到即可以登录。
所以为了避免这种情况我们应该让输入信息和固定的sql语句分离。
那么原sql语句可以改成这样——
const sql SELECT username, password FROM table_login WHERE username ? AND password ?而用户名和密码则保存在sqlParams中以数组的形式——
[admin, 123456]
由此就可以避免输入的安全性问题。
所以tools中的代码如下——
// 导入链接
const connect require(./connect)// MySQL操作
const execute (sql, sqlParams []) {return new Promise((resolve, rejected) {connect.query(sql, sqlParams, (error, results, fields) {if (error) return rejected(error);resolve(JSON.parse(JSON.stringify(results)));});});
}module.exports execute;
最后依然是匿名导出execute()方法。
结束语
本期内容到此结束。关于本系列的其他博客可以查看我的Node.js专栏和MySQL专栏。
在全栈领域博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历然后把自己领悟到的一些东西总结一下分享给大家。
文章全篇的操作过程都是笔者亲自操作完成的一些定义性的文字加入了笔者自己的很多理解在里面所以仅供参考。如果有说的不对的地方还请谅解。
期待与你在下一期博客中再次相遇
——放了挺久的【H2O2】