nodejs如何简洁优雅的访问mysql数据库一、前言自nodejs诞生以来,出现了一大批web框架,比如expresskoa2egg等前端可以不再依赖后端,可以通过自己的终端逻辑来控制服务。今天我们就来说说前端是如何在nodejs中操作mysql数据库的。2.直接使用mysqljs操作数据库。比如查询一个字段,代码逻辑看起来很清晰,但是只查询一个字段需要那么多代码太麻烦了:有些框架自己提供了一些接口来简化增删改查操作比如egg-mysql是egg中提供:简单的查询条件场景可以解决,但是在我们真实场景的查询条件中,各种表关联,各种字段like,in,findinset拼接条件,各种子查询等,如果不满意,必须自己编写SQL文本。比如写SQL实现一个服务器端的分页,实现起来相当麻烦:有没有更简洁的操作数据库的方式?答案是肯定的。社区中有很多优秀的orm或sqlbuilder库,比如objection和sequelize。,knexjs,squel等3.工具介绍不过这里想给大家介绍一个更加简洁易用的nodejs操作mysql的内部工具库ali-mysql-client。然后定义数据模型更加轻量和简洁。我们先来看一个查询示例。是不是看起来简单易懂?下面介绍一下它的一些特性:SQLBuilder的能力提供selectinsertupdatedelete的强大SQLBuilder的能力-richCommand提供了丰富的数据库命令,更方便的访问数据库条件封装扩展这里的第三个参数operator是我们封装的条件逻辑,可以通过在字符串或函数中。如果不通过,则默认为相等。类库中内置了以下运算符:eq(等于)ne(不等于)in(in)gt(大于)ge(大于等于)lt(小于)le(小于等于)isnull(isnull)isnotnull(不为null)like(like)startwith(开始于)endwith(结束于)between(之间)findinset(find_in_set(value,field))insetfind(find_in_set(field,value))sql(自定义sql)关键字(keywordsquery)supportsself-expansion:dynamicconditions这个是我们自己根据经验设计的一个参数,目前在社区还没有看到,主要是用来简化代码,也就是当xx条件为满足,忽略查询条件。设计的初衷是为了简化代码,比如下面的代码是很常见的。如果接口上有输入值,就会查询。如果没有输入值,则不会作为查询条件。比如界面上有一个输入值,就会作为查询条件。这很常见。上面的代码在使用ignore时可以简化为:支持传入字符串或者传入函数,传入的字符串会匹配定义的逻辑。函数的形式如下:事件支持当然我们在开发的时候需要排查问题,看看为什么查询的数据不对,所以支持一些事件,在里面可以记录你的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.jscontrollercontroller/home.jsserviceservice/foo.js更多例子demo-eggdemo-koademo-express4.开源的地址ali-mysql-client已经在github上开源。目标是为nodejs访问mysql数据库提供一个强大流畅的API工具库。希望访问数据库的逻辑可以用一行代码完成,让访问数据库变得更简单,更优雅。大家如果在使用中有什么问题,欢迎在github上反馈和讨论
