npm package: @pakwoon/mysql-utils
Description: nodejs 连接 mysql 辅助方法
Latest version: 1.1.4

# @pakwoon/mysql-utils

nodejs 连接 mysql 辅助方法

## 便捷操作

### genOperation

生成 mysql 便捷执行器

#### 入参

- `config` _(Config)_ - mysql 连接信息
  - `host` _(string)_ - 服务地址/IP
  - `port` _(string)_ - 端口
  - `user` _(string)_ - 用户名
  - `password` _(string)_ - 密码
  - `database` _(string)_ - 数据库名称
  - `multipleStatements` _(boolean)_ - 一次执行多条 sql

#### 返回

- `object` _(Object)_ - 操作器对象

  - `executor` _((sql: Sql) => Promise<ApiRes>)_ - 执行器
  - `insert` _((options: InsertOptions) => Promise<ApiRes>)_ - 插入执行器
  - `del` _((options: DeleteOptions) => Promise<ApiRes>)_ - 删除执行器
  - `update` _((options: UpdateOptions) => Promise<ApiRes>)_ - 更新执行器
  - `detail` _((options: SelectOptions) => Promise<ApiRes>)_ - 详情执行器
  - `list` _((options: SelectOptions) => Promise<ApiRes>)_ - 列表执行器
  - `pageList` _((options: SelectOptions) => Promise<ApiPageListRes>)_ - 分页列表执行器

  _InsertOptions、DeleteOptions、UpdateOptions、SelectOptions 详细信息请查看下文的拼接字符串部分_

## 连接 mysql

### genExecutor

生成 mysql 执行器

#### 入参

- `config` _(Config)_ - mysql 连接信息
  - `host` _(string)_ - 服务地址/IP
  - `port` _(string)_ - 端口
  - `user` _(string)_ - 用户名
  - `password` _(string)_ - 密码
  - `database` _(string)_ - 数据库名称
  - `multipleStatements` _(boolean)_ - 一次执行多条 sql

#### 返回

_((sql: Sql) => Promise<ApiRes>)_ - 执行器

### executor

调用 genExecutor 生产的执行器方法 executor

#### 入参

- `sql` _(Sql)_
  - `sqlStr` _(string)_ - sql 字符串
  - `params` _((string | number | boolean)[])_ - mysql2 包中 connection.query 方法接收的第二个参数

#### 返回

connection.query 查询结果

## sql 字符串便捷拼接

### getInsertSqlStr

拼接 insert sql 字符串

#### 入参 - InsertOptions

- `table` _(string)_ - 表格名称
- `key` _(string)_ - 插入行对应的 key
- `values` _(string)_ - 插入行对应的 values

#### 返回

_(string)_ - 拼接后的 insert sql 字符串

### getDeleteSqlStr

拼接 delete sql 字符串

#### 入参 - DeleteOptions

- `table` _(string)_ - 表格名称
- `where` _(string)_ - 删除条件

#### 返回

_(string)_ - 拼接后的 delete sql 字符串

### getUpdateSqlStr

拼接 update sql 字符串

#### 入参 - UpdateOptions

- `table` _(string)_ - 表格名称
- `set` _(string)_ - 更新字段字符串
- `where` _(string)_ - 更新条件

#### 返回

_(string)_ - 拼接后的 update sql 字符串

### getSelectSqlStr

拼接 select sql 字符串

#### 入参 - SelectOptions

- `select` _(string)_ - 查询字段
- `table` _(string)_ - 表格名称
- `where` ? _(string)_ - 过滤条件
- `pageInfo` ? _(PageInfo)_ - 分页对象
  - `pageIndex` _(number)_ - 查询页码（起始：1）
  - `pageSize` _(number)_ - 单页条数

#### 返回

_(string)_ - 拼接后的 select sql 字符串

## 获取标准返回对象

### ApiRes

标准返回对象

#### 属性

- `success` _(boolean)_ - 返回成功/失败
- `message` _(string)_ - 返回信息
- `errorCode` _(string)_ - 错误码
- `data` ? _(T=any)_ - 返回数据对象

### genGetApiResult

生成获取返回对象方法，用于添加扩展错误信息

#### 入参

- `errorMessage` ? _(Record<string, string>)_ - 附加自定义错误信息

#### 返回

_(<T = any>(options?: Partial<ApiRes<T>>) => ApiRes<T>)_ - 获取返回对象方法

### getApiResult

调用 genGetApiResult 方法，返回的 getApiResult

#### 入参

- `options` _(Partial<ApiRes>)_ - ApiRes 对象可选化

#### 返回

_(ApiRes)_ - 标准返回对象

#### 内部逻辑

##### 默认返沪成功的标准返回对象

```
const res = {
  success: true,
  message: _errorMessage[ERROR_CODE.SUCCESS], // “成功”
  errorCode: ERROR_CODE.SUCCESS, // "SUCCESS"
};
```

#### options.success === false 并无传入 options.errorCode

```
const res = {
  success: false,
  message: _errorMessage[ERROR_CODE.FAIL], // “失败”
  errorCode: ERROR_CODE.FAIL, // "FAIL"
};
```

#### options.errorCode 传入并不等于 “SUCCESS“

```
const res = {
  success: false,
  message: _errorMessage[errorCode], // 自动匹配对应错误信息
  errorCode: errorCode, // 传入的 errorCode
};
```

## 错误码与错误信息

```
/** 错误码 */
export enum ERROR_CODE {
  SUCCESS = 'SUCCESS',
  FAIL = 'FAIL',
  SYSTEM_ERROR = 'SYSTEM_ERROR',
  NOT_FOUND = 'NOT_FOUND',
  MISSING_PARAMS = 'MISSING_PARAMS',
}

/** 错误信息 */
export const ErrorMessage: Record<ERROR_CODE, string> = {
  [ERROR_CODE.SUCCESS]: '成功',
  [ERROR_CODE.FAIL]: '失败',
  [ERROR_CODE.SYSTEM_ERROR]: '系统错误',
  [ERROR_CODE.NOT_FOUND]: '找不到对应信息',
  [ERROR_CODE.MISSING_PARAMS]: '缺少必传参数',
};
```

## 辅助方法

### missingParams

检查 params 对象中是否存在值为 undefined 的属性

#### 入参

- `params` _(Record<string | number | symbol, any>)_ - 检查对象
- `keys` ? _((number | string | symbol)[])_ - 检查属性名称集合

#### 返回

_(boolean)_ - 是否存在