iT邦幫忙

0

Day 10|CRUD 全面轉正:新增、更新、刪除都寫進 SQLite

  • 分享至 

  • xImage
  •  

昨天只把GET改成讀取資料庫,今天把剩下的POST、PUT、DELETE全部接上,讓待辦清單終於做到真正的資料永久保存。

今天做的事
新增改成寫入資料庫:

app.post('/api/todos', (req, res) => {
  const { title } = req.body;
  if (!title) return res.status(400).json({ message: '請提供待辦事項內容' });

  const stmt = db.prepare('INSERT INTO todos (title, done) VALUES (?, 0)');
  stmt.run(title, function (err) {
    if (err) return res.status(500).json({ message: '資料庫錯誤' });
    res.status(201).json({ id: this.lastID, title, done: 0 });
  });
  stmt.finalize();
});

更新(切換完成狀態)跟刪除也改成對資料庫下指令,分別用UPDATE跟DELETE FROM這兩個SQL語法。

觀察

  • 新增的callback要用function (err) {...},不能用箭頭函式,因為要靠this.lastID拿到剛新增那筆資料的id,箭頭函式沒有自己的this,一開始沒注意這點,寫成箭頭函式時this.lastID會是undefined
  • 刪除的時候用this.changes判斷有沒有真的刪到資料,如果傳進來的id根本不存在,changes會是0,這時候要回傳404,而不是裝作刪除成功
  • 今天終於走完完整的驗收流程:新增、切換完成、刪除都測過一輪後,把終端機的伺服器直接關掉重開,重新整理頁面,資料全部都還在。這是這十天來第一次真正感受到資料庫這三個字的意義

心得
前九天雖然功能看起來都正常,但本質上是正常運作的假象,資料其實隨時可能因為伺服器重啟而消失,只是因為開發時很少重啟,才沒發現這個破綻。今天接上資料庫後,才算是把地基補起來,之前的CRUD功能才是真正完整的。
回頭看這十天,從原生http手刻路由,到Express簡化路由,到Middleware、到前後端分離串API,再到今天資料真正落地保存,每一步都是在補上一塊之前刻意留下的坑。這種先讓它動起來,再一步步補強的順序,比一開始就想把所有東西寫完整,更容易持續推進。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言