連接 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; ``` 很神奇吧。