4月 14, 2020 NodeJS
連接 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;
```

很神奇吧。
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)