koa连接数据库
安装 mysql 模块
npm install --save mysql
1
mysql 模块是 node 操作 MySQL 的引擎,可以在 node.js 环境下对 MySQL 数据库进行建表,增、删、改、查等操作。
# 创建数据库会话
const mysql = require('mysql')
const connection = mysql.createConnection({
host: host, // 数据库地址
user: 'root', // 数据库用户
password: 123456, // 数据库密码
database: 'my_database', // 选中的数据库
})
// 执行sql脚本对数据库进行读写
connection.query(mysql查询语句, (err, results) => {
return new Promise((resolve, reject) => {
if (err) {
reject(err)
return false;
}
const dataString = JSON.stringify(results)
resolve(JSON.parse(dataString));
connection.release() // 结束会话
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
注意:一个事件就有一个从开始到结束的过程,数据库会话操作执行完后,就需要关闭掉,以免占用连接资源。
# 创建数据连接池
一般情况下操作数据库是很复杂的读写过程,不只是一个会话,如果直接用会话操作,就需要每次会话都要配置连接参数。所以这时候就需要连接池管理会话。
const mysql = require('mysql')
// 创建数据池
const pool = mysql.createPool({
host: host,
user: 'root',
password: 123456,
database: 'my_database'
})
// 在数据池中进行会话操作
pool.getConnection((err, connection) => {
connection.query(mysql查询语句, (err, results) => {
// 结束会话
connection.release();
// 如果有错误就抛出
if (error) throw error;
})
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建数据池并进行会话方法封装
对创建数据池并进行会话操作进行封装后,代码如下:
/db/dbConfig.js 文件代码如下:
const mysql = {
host: 'localhost',
port: '3306',
user: 'root',
password: '12345678',
database: 'runoob'
}
module.exports = mysql
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
utils.js
const config = require('./db/dbConfig')
const mysql = require('mysql')
// 创建数据吃
function connect () {
return mysql.createPool(config)
}
// 进行会话
function sqlQuery (sql) {
const conn = connect()
return new Promise((resolve, reject) => {
conn.getConnection((err, connection) => {
if (err) {
throw new Error(err)
return false;
}
try {
connection.query(sql, (error, results) => {
if (error) {
reject(error);
} else {
const dataString = JSON.stringify(results)
resolve(JSON.parse(dataString));
}
})
} catch (e){
reject(e)
} finally {
connection.release()
}
})
})
}
// 查询表中记录总数
async function getTotalCount (tableName) {
return await sqlQuery(`SELECT COUNT(*) as totalCount FROM ${tableName}`)
}
module.exports = {
sqlQuery,
getTotalCount
}
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
在其他路由里使用如下:
const Router = require('koa-router')
const router = new Router()
const {sqlQuery, getTotalCount} = require('../utils')
router.post('/getList', async (ctx) => {
let query = null
let {user_name, page, pageSize} = ctx.request.body
if (user_name) {
query = `select * from user_list where user_name like '%${user_name}%'`
} else {
// 从page * pageSize - pageSize开始,往后取pageSize条数据。。
query = `select * from user_list limit ${pageSize} offset ${page * pageSize - pageSize}`
}
const totalCount = (await getTotalCount('user_list'))[0].totalCount
const data = await sqlQuery(query)
if(!data || data.length === 0) {
ctx.body = {
code: 200,
msg: '数据为空',
data: [],
totalCount: 0
}
} else {
ctx.body = {
code: 200,
msg: 'success',
data: data,
totalCount: totalCount
}
}
})
module.exports = router
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
29
30
31
32
33
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
29
30
31
32
33
编辑 (opens new window)
上次更新: 7/2/2024, 11:06:45 AM