leiwuhen-67's blog leiwuhen-67's blog
首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)

我的公众号

首页
    • 《Vue》笔记
    • 《React》笔记
    • 《NodeJs》笔记
    • 《CSS》笔记
    • 《Redis》笔记
    • 基础入门
    • 《Mock》笔记
    • 《MySQL》笔记
    • 《Git》相关
影音视听
收藏
关于
GitHub (opens new window)
  • Express

  • Koa

    • koa应用搭建与路由配置
    • koa连接数据库
      • 用户认证之jsonwebtoken
    • Egg

    • Node相关

    • 《NodeJs》笔记
    • Koa
    心欲无痕
    2022-04-19
    目录

    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

    注意:一个事件就有一个从开始到结束的过程,数据库会话操作执行完后,就需要关闭掉,以免占用连接资源。

    # 创建数据连接池

    一般情况下操作数据库是很复杂的读写过程,不只是一个会话,如果直接用会话操作,就需要每次会话都要配置连接参数。所以这时候就需要连接池管理会话。

    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

    # 创建数据池并进行会话方法封装

    对创建数据池并进行会话操作进行封装后,代码如下:
    /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

    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

    在其他路由里使用如下:

    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
    编辑 (opens new window)
    上次更新: 7/2/2024, 11:06:45 AM
    koa应用搭建与路由配置
    用户认证之jsonwebtoken

    ← koa应用搭建与路由配置 用户认证之jsonwebtoken→

    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式