美文网首页
nodejs 学习笔记(2)连接数据库,并封装数据库增删改查

nodejs 学习笔记(2)连接数据库,并封装数据库增删改查

作者: 东扯葫芦西扯瓜 | 来源:发表于2021-06-15 08:43 被阅读0次

    连接数据库的需求是从想写写一个小小的数据查询接口开始的。想从数据库查询数据,就得先连接数据库。

    这里使用mysql,数据库安装不做赘述。只说在nodejs上的操作

    安装mysql插件

    首先要安装Nodejs的mysql插件

    npm install mysql --save
    

    创建连接池

    项目根目录下新建mysql文件夹,文件夹下新建mysql.js文件

    项目根目录下创建utils文件夹,utils文件夹下创建code.js,用于定义返回数据的成功失败类型

    code.js 文件

    module.exports={
        success:1,//成功
        err:0,//失败
        repeat:2,//重复
    }
    
    

    mysql.js文件中创建数据库连接池

    const mysql      = require('mysql')
    const code=require('../utils/code')
    console.log(mysql)
    // 创建数据池
    const pool  = mysql.createPool({
        host     : '127.0.0.1',   // 数据库地址
        user     : 'root',    // 数据库用户
        password : 'yanglian',   // 数据库密码
        database : 'labour'  // 选中数据库
    })
    

    mysql.js文件中封装增删改查的数据返回格式

    
    // params 进行添加或修改的数据
    function poolFn(connecQuery, sql, params) {
        // getConnection 创建连接池
        return new Promise((resolve, reject) => {
            pool.getConnection((err, connection) => {
                if(err) {
                    reject('建立连接池失败')
                    throw err
                }
                connecQuery(connection, sql, params).then(data => {
                    connection.release() // 到这步说明已经完成操作,释放连接
                    resolve(data)
                })
            })
            // console.log(pool._allConnections.length) // 连接池里的连接数
        })
    }
    /*
    * connection 连接句柄
    * sql 查询语句
    
    * */
    
    // 基于promise方法实现
    
    // 查询数据
    function find(connection, sql) {
        return new Promise((resolve, reject) => {
            connection.query(sql, (err, data) => {
                // console.log(data)
                if(err) {
                  reject(err)
                    throw err
                }
                resolve(data)
            })
        })
    }
    
    // 添加数据
    function add(connection, sql, params) {
        return new Promise((resolve, reject) => {
            connection.query(sql, params, (err, result) => {
                if(err) {
                    resolve({
                        msg:'添加失败',
                        code:code.err,
                        data:null
                    })
                    throw err
                }
                resolve({
                    msg:'添加成功',
                    code:code.success,
                    data:null
                })
            })
        })
    }
    
    // 删除数据
    function del(connection, sql) {
        return new Promise((resolve, reject) => {
            connection.query(sql, (err, result) => {
                if(err) {
                    resolve({
                        msg:'删除失败',
                        code:code.err,
                        data:null
                    })
                    throw err
                }
                resolve({
                    msg:'删除成功',
                    code:code.success,
                    data:null
                })
            })
        })
    }
    
    // 修改数据
    function update(connection, sql, params) {
        return new Promise((resolve, reject) => {
            connection.query(sql, params, (err, result) => {
                if(err) {
                   reject(err)
                    throw err
                }
                resolve(result)
            })
        })
    }
    
    // 将方法封装统一导出
    
    function queryFn(connecQuery, sql, params) {
        return new Promise((resolve) => {
            poolFn(connecQuery, sql, params).then(data => {
                console.log(data)
                resolve(data)
            })
        })
    }
    
    module.exports = {
        findData(sql, params) {
            return queryFn(find, sql, params)
        },
        addData(sql, params) {
            return queryFn(add, sql, params)
        },
        delData(sql, params) {
            return queryFn(del, sql, params)
        },
        updateData(sql, params) {
            return queryFn(update, sql, params)
        }
    }
    
    

    在mysql文件夹下创建processData.js,提供供外界调用的增删改查函数,并决定最终返回给浏览器的数据格式

    process.js文件

    const {
        findData,
        addData,
        delData,
        updateData
    } = require('./mysql')
    const code=require('../utils/code')
    
    
    // 这边通过async方法保证数据的同步获取
    
    let query = async(ctx,sql,config={}) => { // 获取数据
        let {params,type='json',isObj}=config
        // 返回的数据格式为json
        ctx.response.type = type
        await findData(sql,params).then(data => {
            ctx.body = {
                data:isObj ? data[0] : data,
                msg:'查询成功',
                code:code.success
            }
        })
    }
    
    let add = async(ctx,sql,config={}) => { // 添加数据
        // console.log(ctx)
        let {params,type='json'}=config
        ctx.response.type =type
        console.log(params)
        await addData(sql, params).then(data => {
            ctx.body = data
        }, () => {
            ctx.body = data
        })
    }
    
    let del = async(ctx,sql,config={}) => { // 删除数据
        let {params,type='json'}=config
        ctx.response.type =type
        await delData(sql,params).then(data => {
            ctx.body = data
        }, () => {
            ctx.body = data
        })
    }
    
    let update = async(ctx,sql,config={}) => { // 修改数据
        let {params,type='json',msg='更新成功'}=config
        ctx.response.type =type
        await updateData(sql, params).then(data => {
            // console.log(data)
            ctx.body = {
                data:null,
                msg,
                code:code.success
            }
        })
    }
    
    module.exports = {
        query,
        add,
        del,
        update
    }
    
    

    相关文章

      网友评论

          本文标题:nodejs 学习笔记(2)连接数据库,并封装数据库增删改查

          本文链接:https://www.haomeiwen.com/subject/lyogeltx.html