No Particular Method

    mysql-qs-parse
    TypeScript icon, indicating that this package has built-in type declarations

    2.4.18 • Public • Published

    个人logo

    一款能够自由操作mysql语句的插件,简直是增删改查无所不能(A plug-in that can freely operate MySQL is omnipotent)

    为什么使用(Why)

    • Mysql-Qs-Parse 基于发布订阅来实现,所有的响应都可以通过订阅来做
    • Mysql-Qs-Parse 所有的查询都支持Promise
    • Mysql-Qs-Parse 为了方便各种业务查询,增加了很多方法find, findOne等
    • Mysql-Qs-Parse 每次sql操作都会有对应的log打印
    • Mysql-Qs-Parse 它是安全的,每次查询都会经过非法字符的过滤,保证安全性
    • Mysql-Qs-Parse 争取做到零失误,经过严密的jest测试

    mysql数据库每次进行操作之前进行数据连接,为了能让每次请求后释放连接,提供了release方法,请注意!!!!

    install

    $ npm install mysql-qs-parse
    $ $yarn add mysql-qs-parse
    

    example

    实例1

    const MysqlParse = require('mysql-qs-parse')
    const db = new MysqlParse('localhost', 'user', 'password', 'bookSystem')
    db.once('open', () => {
      // 打开成功的订阅
    })
    
    db.on('error', (log) => {
      console.log(log) // 所有的错误都可以通过订阅来获取
    })
    
    db.on('mysql-log', (sql) => {
      console.log(sql) // 执行sql文 会从这里打印
    })
    // ... 还可以订阅close函数
    
    // 进行数据库连接
    await db.open()
    
    // 查询 User表的name,id字段 条件是age = 20
    const res = await db.find(['name', 'id'], 'User', {age: 20})
    
    // 查询结束后 释放连接
    db.release()

    实例2

    const MysqlParse = require('mysql-qs-parse')
    const db = new MysqlParse({
      host: 'localhost',
      user: 'root',
      password: '123456',
      database: 'test'
    })
    db.once('open', () => {
      // 打开成功的订阅
    })
    
    db.on('error', (log) => {
      console.log(log) // 所有的错误都可以通过订阅来获取
    })
    
    db.on('mysql-log', (sql) => {
      console.log(sql) // 执行sql文 会从这里打印
    })
    // ... 还可以订阅close函数
    
    // 进行数据库连接
    await db.open()
    
    // 查询 User表的name,id字段 条件是age = 20
    const res = await db.find(['name', 'id'], 'User', {age: 20})
    // 查询结束后 释放连接
    db.release()

    options

    基于发布订阅的方法

    • db.once('open', fn):当数据库连接成功的时候,进行订阅方法的回调,将会调用这个订阅函数, 下次重新连接,重新订阅
    • db.on('close', fn):同理,这个是连接关闭的订阅函数
    • db.on('error', fn):同理,所有的错误都是通过订阅error的函数来实现
    • db.on('mysql-log', fn):如果您的业务场景下需要每次执行都要看到sql执行,这里会打印出拼装的sql

    数据库相关的函数

    • db.open():进行数据库的连接,连接的回调可以在db.on('open')/ 或是await db.open()(建议使用后者)中来查询
    • db.close():进行数据库的连接关闭,关闭成功回调可以在db.on('close')中来查询

    执行sql的函数

    • findOne(fields, tableName, where)
      • fields 是一个数组,里面存放的每个字段,每个元素可以是字符串以及对象,如果是字符串表示数据库字段,如果是对象的话,表示别名,具体实例如下:
      • findOne(['name', {age: 'age1'}], 'User') => select name, age as age1 from User
      • tableName字段表示可以查询的表名
      • where字段表示条件,例如{age: 20} => select XXX from where age = 20
      • 下面相同的字段同样的意思,这里不在过多的解释了
      • 函数findOne只能查询单条数据,就算实际的数据库的返回结果是多条,但是函数只会返回一个条
    • find(fields, tableName, where)
      • 具体的参数字段含义,可以参照findOne函数
      • 这个函数会返回多条数据,实际数据库中返回几条会依次都返回
      • 如果想使用拆线的排序以及limit功能,请看下面的分解:
        • 除了上述find函数中传递的参数以外,还可以传递一个对象,对象的参数下解:
          • fields:表示查询的字段,字段的格式跟函数findOne保持一致. 必须项
          • tableName:表示查询的表,必须项
          • where:表示检索的条件,跟上述的where格式保持一致
          • order: 表示排序的字段,这个值是一个对象,如果是升序值为top,反之bottom。例如:{a: top, b: bottom} => ORDER BY a asc, b desc.如果不是左侧两个值,在sql查询的时候直接被过滤掉
          • limit:表示分页的关键字,这个值同样是一个对象,分别有page,limit. 分别是页数,条数。例如:{page: 1, limit: 5} => limit 1, 5
    • insert(fields, tableName)
      • 对表进行插入操作
      • fields属性表示插入的对象,里面所有的元素都是对象,key表示插入的表属性,value表示插入的表值
      • tableName属性表示插入的表
      • 如果插入后的返回值是1,表示插入成功反之失败(0)
    • update(fields, tableName, where)
      • 对表中的数据进行更新
      • fields字段表示更新字段,key表示表属性,value表示更新后的表值
      • tableName字段表示更新的表名
      • where字段表示条件,跟函数findOne的含义一样
      • 如果更新后的返回值是1,表示更新成功反之失败(0)
    • delete(tableName, where, fields)
      • 对表进行删除,这里分为逻辑删除以及物理删除,如果字段fields存在就表示逻辑删除,反之就是物理删除
      • tableName属性表示更新的表
      • where属性表示操作的条件,跟函数findOne含义一致
      • fields属性表示逻辑删除时更新的字段,逻辑删除必须的
      • 如果删除后的返回值是1,表示删除成功反之失败(0)
    • release
      • 每次执行mysql操作的时候,都会创建连接,每次执行结束后释放连接,但是考虑到用户可能一个连接执行多次sql,所以释放连接的功能暴露出去
      • 每次执行结束后执行release函数,记得下次请求前一定要重新执行open函数
    • size(tableName, where)
      • 该函数用来查询表中的条数,其实就是count语句。
      • tableName属性表示查询的表
      • where属性表示查询的条件。可选参数
      • 返回结果直接就是查询的条数,如果没有数据直接返回0
    • 后续还有很多功能推出(例如:多表查询,复杂查询等)...
    • query(sql)
      • 该函数提供了原生的mysql查询方式,可以提供一些比较复杂的多表查询等操作
      • 只不过本函数实现了promise,可以通过同步的方式来处理

    QA

    • 使用插件后,在查询的时候出现错误(mysql PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR)
    • 为什么会多测触发订阅的open方法呢???
      • answer: 回调时基于发布订阅的,不能连续订阅多次,如果想订阅也可以用once 来替代on
    • 还是不太明白该怎么用??? 怎么能高效使用插件
      • answer: 下面来给大家讲解一个我自己用的mysql-connect中间件
        const MysqlParse = require('mysql-qs-parse')
        const { logInfo } = require('./helper')
        const resultInfo = require('./resultInfo')
        const { CONNECT_FAIL } = require('./constants')
        
        // 初始化mysql配置
        const db = new MysqlParse({
          host: 'localhost',
          user: 'root',
          password: 'root',
          database: 'super-admin-system'
        })
        
        /**
        * @author lihh
        * @description 进行数据库的连接
        * @returns 每次动态释放
        */
        const connect = async () => {
          db.once('error', (...log) => {
            logInfo.fail(log)
            throw Error(resultInfo.result('', CONNECT_FAIL.code, CONNECT_FAIL.msg))
          })
        
          await db.open()
          logInfo.info('数据库连接成功')
          return {
            release: db.release,
            db
          }
        }
        
        module.exports = connect

    联系我

    个人logo

    Install

    npm i mysql-qs-parse

    DownloadsWeekly Downloads

    33

    Version

    2.4.18

    License

    ISC

    Unpacked Size

    43.8 kB

    Total Files

    6

    Last publish

    Collaborators

    • lihh