npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mysql-qs-parse

v2.4.18

Published

![个人logo](http://lihh-core.top/images/mysql-qs-parse.png) > 一款能够自由操作mysql语句的插件,简直是增删改查无所不能(A plug-in that can freely operate MySQL is omnipotent)

Downloads

79

Readme

个人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