Node.js操作MySQL数据库
Axin Lv1

Node.js操作MySQL数据库

MySQL驱动的安装

使用以下命令安装 node.js 的 MySQL 的驱动库:

1
npm install mysql

Node.js连接及使用MySQL

进行 MySQL 连接前需要进行连接配置的声明及初始化

1
2
3
4
5
6
7
const MYSQL_CONF = {
host: 'localhost', // MySQL主机地址
user: 'root', // 用户名
password: '123456', // 密码
port: '3306', // 端口号
database: 'myblog' // 数据库名
}

然后通过 mysql.createConnection(config) 方法传入连接配置创建一个连接:

1
const con = mysql.createConnection(MYSQL_CONF)

接着使用 con.query(sql, callback) 方法即可对 MySQL 发送 SQL 命令,数据库响应返回通过 callback 函数调用,以查询语句为例:

1
2
3
4
5
6
7
con.query(`select * from users`, (error, result)=>{
if(error){
console.log('error: ', error)
}else{
console.log('success: ', result)
}
})

callback 函数将 SQL 命令的结果通过参数的形式获取并返回,如果 SQL 存在错误则将其错误输出,如果查询成功则将其结果输出

在连接结束后,需进行数据库连接的关闭:

1
con.end()

在项目中的操作方式

在一个 Node.js 项目中,MySQL 连接通常以单例模式运行,即只需要在项目初始化时进行一次连接,后续的 SQL 命令都通过这次连接发送,不进行连接的关闭,同时将 query 请求使用 Promise 进行包装并向外暴露,方便其他模块的调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const mysql = require('mysql')
const MYSQL_CONF = {
host: 'localhost', // MySQL主机地址
user: 'root', // 用户名
password: '123456', // 密码
port: '3306', // 端口号
database: 'myblog' // 数据库名
}

const con = mysql.createConnection(MYSQL_CONF)

con.connect()

function exec(sql){
return new Promise((resolve, reject)=>{
con.query(sql, (error, result)=>{
if(error){
reject(error)
return
}
resolve(result)
})
})
}

module.exports = {
exec
}

错误与其解决方法

  • Client does not support authentication protocol requested by server

    当使用 Node.js 连接 MySQL 8.0 以上版本时会出现该错误

    主要是由于加密方式的不同而产生的,因此需要更改 MySQL 账号的加密方式

    首先使用use mysql;切换数据库,然后使用select user,host from user;查看 root 用户所对应的 host ,接着继续加密方式的修改:

    image-20211223211949578

    1
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

    其中,'root'@'%'也就是由 root 与其对应的 host 所组成,最后使用FLUSH PRIVILEGES;刷新权限,错误就能成功解决

  • 本文标题:Node.js操作MySQL数据库
  • 本文作者:Axin
  • 创建时间:2021-12-23 10:41:01
  • 本文链接:https://izhang.xin/2021/12/23/Node-js操作MYSQL数据库/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!