連接 DB 是一件必定要進行的事,在 Laravel 可以使用 ORM 去完成,而在 NodeJS 上,筆者用得最多是使用 npm mysql 去完成。雖然 NodeJS 上的 mysql library 是一個寫得很成熟的東西,但是在建立 query 時還是有很多不足的地方。最明顯的地方是在建立 conditional where 時。
### 例子
以下是一個壞的例子 :
```js
var sqlParams = [];
var where = [];
// conditional where case
if( typeof id === 'number' ) {
where.push('id = ?');
sqlParams.push(id)
}
// sql
var sql = 'select * from users where ' + where.join(' and ');
// execute query
db.query(sql, sqlParams, callback);
```
相信這樣的 SQL Statement 大家都有可能寫過 / 見識過。雖然上面的寫法還不致於十分混亂,但是讀起來也不是太方便。如果又要同時用上 AND 及 OR 時,可能就會出現比較混亂的情況了 !
### Knex.js - A SQL Query Builder for Javascript
這是 Knex.js 自己介紹自己的,它是一個 SQL Query Builder。
不過除此之後它還會自行管理 Connection 的生命週期,使用 Connection Pool 的話還會自行 release connection,算是一個非常便利及強勁的 Database adapter。
官方網站 : http://knexjs.org
以下是使用 Knex 的方法來重寫一次上面的代碼 :
```js
// query
var query = knex('users');
// conditional where case
if( typeof id === 'number' ) {
query.where('id', id);
}
// execute query
var result = await query;
```
很神奇吧。