跳到主要内容

1 篇博文 含有标签「mysql」

查看所有标签

· 阅读需 4 分钟

好久不见,好忙,前段时间搭了一套electron-vue客户端,就想着用node把后台也一起搞搞,koa+mysql。

mysql 安装

本地开发环境为mac,mysql下载地址,下载安装就可以了。

mysql

通过Navicat连接查看,新建了一个名为electron_vue的数据库。

mysql

koa 安装

可以通过koa-generator脚手架直接安装使用->传送门

脚手架下载后npm install安转依赖模块,安装后目录展示。

koa

npm start启动后,浏览器访问http://localhost:3000/是这个样子的。

koa

koa 连接 mysql

首先执行npm install mysql -S,引入mysql依赖。

根目录下新建config文件夹,文件夹下新建mysql_config.js文件,添加相关配置。

const mysqlConfig = {
host: "localhost",
port: 3306,
user: "root", // mysql用户名
password: "4231", // 自己设置的mysql密码
database: "electron_vue", // mysql数据库名称
};

module.exports = mysqlConfig;

根目录下新建utils文件夹,新建query.jssql.js,分别加入如下代码。

// query.js
const mysql = require("mysql");
const MYSQL_CONFIG = require("../config/mysql_config"); // 数据库配置

// mysql
const pool = mysql.createPool(MYSQL_CONFIG);

// query sql语句入口
const query = (sql, val) => {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
reject(err);
} else {
connection.query(sql, val, (err, fields) => {
if (err) reject(err);
else resolve(fields);
connection.release();
});
}
});
});
};

module.exports = {
query,
};
// sql.js
// 创建数据库
const CREATE_TABLE = `CREATE TABLE IF NOT EXISTS user(
user_id INT(5) NOT NULL AUTO_INCREMENT,
user_name VARCHAR(255) NOT NULL,
user_phone VARCHAR(255) NOT NULL,
PRIMARY KEY (user_id)
);`.replace(/[\r\n]/g, "");

// 查询数据表
const QUERY_TABLE = (tableName) => `SELECT * FROM ${tableName}`;

// 插入数据
const INSERT_TABLE = (tableName, { key, val }) =>
`INSERT INTO ${tableName}(${key}) VALUES (${val})`;

// 更新数据
const UPDATE_TABLE = (tableName, { primaryKey, primaryVal }, { key, value }) =>
`UPDATE ${tableName} SET ${key}=${val} WHERE(${primaryKey}=${primaryVal});`;

// 删除数据
const DELETE_TABLE = (tableName, { primaryKey, primaryVal }) =>
`DELETE FROM user WHERE(${primaryKey}=${primaryVal});`;

module.exports = {
CREATE_TABLE,
INSERT_TABLE,
UPDATE_TABLE,
DELETE_TABLE,
};

routers/index.js中引入,先创建一张表试一下。

const router = require("koa-router")();

const { query } = require("../utils/query");
const {
CREATE_TABLE,
INSERT_TABLE,
UPDATE_TABLE,
DELETE_TABLE,
} = require("../utils/sql");

query(CREATE_TABLE);

// ....省略了

module.exports = router;

启动后台发现报错如下(据说是mysql8客户端错误)

run

需要在mysql中执行此命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '此处填写数据库密码!';
FLUSH PRIVILEGES;

我是在Navicat中执行的。

run

在重新启动,会发现数据库中新建了一张名为user的表。

run

至此,基本的koa连接使用mysql就完成了。

ps:

升级了mysql到8之后,发现,koa mysql模块连接不上mysql

报错如下(忘记截图了。。。):

UnhandledPromiseRejectionWarning: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

原因是最新的mysql模块并未完全支持MySQL 8的“caching_sha2_password”加密方式,而“caching_sha2_password”在MySQL 8中是默认的加密方式。因此,下面的方式命令是默认已经使用了“caching_sha2_password”加密方式,该账号、密码无法在mysql模块中使用。

需要重新修改mysql root的密码。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

参考地址 koa+mysql 参考地址 mysql8修改加密方式