今天做搜尋功能,在篩選分類旁邊加一個搜尋框,輸入關鍵字就能找出標題包含它的待辦事項。
今天做的事
後端把category和q兩個條件組合起來,有帶哪個就加哪個,用AND串接:
const conditions = [];
const params = [];
if (category) {
conditions.push('category = ?');
params.push(category);
}
if (q) {
conditions.push('title LIKE ?');
params.push(`%${q}%`);
}
let sql = 'SELECT * FROM todos';
if (conditions.length > 0) {
sql += ' WHERE ' + conditions.join(' AND ');
}
前端用URLSearchParams組出網址,並加上防抖,使用者停止輸入0.3秒後才會送出請求。
觀察
心得
搜尋看起來只是一個輸入框,背後卻牽涉到安全(SQL Injection)和效能(防抖)兩件事。這兩件事如果不特別去測,平常使用根本不會發現有問題,但真正上線之後就可能出事。
這五天把待辦清單的基本功能補得很完整了,接下來要進入另一個大主題:登入系統,讓每個人只看得到自己的待辦事項。