koa连接 mysql 进行 crud

使用 koa 的 mysql 模块可以方便地连接 mysql 并进行 crud 操作.

npm 安装 mysql 模块

npm i mysql -S

使用-S 来把包信息写到 package.json 中.

使用

1
2
3
4
5
6
7
8
9
10
11
12
const mysql = require("mysql");

const config = {
host: "mysql ip",
user: "root",
password: "123456",
database: "mysql database"
};

//使用 config 创建连接池

const pool = mysql.createPool(config.config);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//使用 promise封装查询函数

let query = (sql, values) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
reject(err);
} else {
connection.query(sql, values, (err, rows) => {
if (err) {
reject({ err: err });
} else {
resolve(rows);
}
connection.release();
});
}
});
});
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

//使用

let result = await queryByLoginName(ctx.request.body.loginName);
if (result.length == 0) {
util.response(ctx, 1000, "账户不存在");
} else {
...
}

queryByLoginName: async name => {
let sql = `SELECT * FROM user WHERE login_name = "${name}"`;
let data = await query(sql);
return data;
},

extra

封装查询结果

定义 const [err,data]来 分别接收 promise.reject()errproject.resolve()data.

1
2
3
4
5
6
7
8
9
10
11
12
13
14


awaitWrap: promise => {
return promise.then(data => [null, data]).catch(err => [err, null]);
}


check: async function(ctx) {
const [err, data] = await awaitWrap(token.verifyJwt(ctx));
if (err) {
return { status: false, data: err.message };
}
...
}

js 生成 sql 语句

自己一点一点拼接 sql 语句很麻烦,这里我用了https://github.com/wangweianger/mysqls/blob/6a1e7590a5c45f5d5600a6964a1bc474fc2972f3/docs/curd/update.md,来自动生成 sql 语句.

安装

npm install mysqls --save

使用

详细的使用方法可以看下这个轮子的作者写的文档,十分详细.

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
const genSql = require("node-transform-mysql");
updateUser: async (ctx, jwt) => {
let userId = ctx.request.body.id;
let sqlQuery = {};
if (ctx.request.body.status) {
sqlQuery.status = ctx.request.body.status;
}
if (ctx.request.body.nickName) {
sqlQuery.nick_name = ctx.request.body.nickName;
}
if (ctx.request.body.adminType) {
sqlQuery.admin_type = ctx.request.body.adminType;
}
let sql = genSql
.table("user")
.data(sqlQuery)
.where({ id: userId })
.update();

const [err, data] = await util.awaitWrap(query(sql));
if (err) {
return { data: err.err.code, status: false };
}
return { data: data.message, status: true };
};

thank u !