nodejs如何简洁优雅的访问mysql数据库
1、前言
nodejs诞生以来出现了一大批的web框架如express koa2 egg等等,前端能够再也不依赖后端能够本身控制服务端的逻辑。今天咱们就来讲说前端在nodejs中如何操做mysql数据库。
2、操做数据库
直接使用mysqljs,好比查询一个字段,代码逻辑看起来是很清晰的,可是仅查询一个字段就须要这么多代码实在是过于麻烦:
一些框架都提供了一些本身的接口去简化CRUD操做,好比egg中提供了egg-mysql:
简单查询条件场景能够解决,可是咱们的真实场景的查询条件中各类表关联、各类字段like、in、findinset拼接条件、各类子查询等等操做都知足不了,必需要本身写SQL文。
例如本身写SQL去实现一个服务端分页,实现起来也是比较麻烦的:
那有没有更简洁的方法去操做数据库呢,答案是确定的社区有不少优秀的orm或sql builder的类库好比objection、sequelize、knexjs、squel等。
3、工具介绍
但在这里要向你们介绍一咱们本身的内部的一个更加简洁易用的的nodejs操做mysql的工具类库 ali-mysql-client 它是一个sql builder思路的实现的工具,无需你额外再去定义数据模型更加轻量简洁。
先看一个查询示例,是否是看起来简洁易懂:
下面介绍下它的一些特色:前端
提供了select insert update delete的强大的SQL Builder能力node
提供了丰富的数据库command更方便的访问数据库mysql
这里的第三个参数operator就是咱们封装的条件逻辑,可传入字符串或函数,不传时默认是equal,
在类库中内置了如下操做符:
eq (equal)
ne (not equal)
in (in)
gt (greater than)
ge (greater than or equal)
lt (less than)
le (less than or equal)
isnull (is null)
isnotnull (is not null)
like (like)
startwith (start with)
endwith (end with)
between (between)
findinset (find_in_set(value, field))
insetfind (find_in_set(field, value))
sql (custom sql)
keywords (keywords query)
支持本身拓展:git
这个是咱们根据咱们本身的经验设计的一个参数,在社区目前还没看到过相似的,它的做用主要是用来简化代码,也就是当知足xx条件时则忽略该查询条件,设计的初衷是为了简化代码,好比如下代码是很常见的,界面上有输入值则查询,没有输入值时不作为查询条件
好比界面上有输入值时则看成查询条件,这是很常见的
上面的代码使用ignore时则可简化为:
支持传字符串或传入函数,传入字符串则会匹配到已定义的逻辑,其函数的形式以下:github
固然咱们开发时须要查问题看看为何查询出来的数据不对,因此支持了一些事件,在这些事件中你能够记录你的sql日志或作一些其它的事件
4、使用示例
在koa框架中完整的使用示例:
├── app
│ ├── controller
│ │ └── home.js
│ ├── router.js
│ └── service
│ ├── bar.js
│ └── foo.js
├── app.js
├── config.js
└── package.json
配置文件config.js
入口文件app.js
路由配置router.js
控制器controller/home.js
服务service/foo.js
更多示例
demo-egg
demo-koa
demo-express
4、开源地址
ali-mysql-client 已经开源到了 github 上,目标是为nodejs访问mysql数据库提供强大流畅的api的工具类库,但愿访问数据库逻辑都能使用一行代码完成,让访问数据库变得更加简单优雅,你们使用有问题欢迎你们在 github 反馈讨论。web