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