FIREBASE WARNING: Exception was thrown by user callback.
前言
這陣子使用 firebase 開發一個簡單系統遇到一個錯誤 Exception was thrown by user callback,這邊紀錄一下發生原因
錯誤訊息
首先先記錄一下重點錯誤訊息
1 | [2019-07-03T01:56:21.311Z] @firebase/database: FIREBASE WARNING: Exception was thrown by user callback. Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client |
程式碼錯誤
接下來下方是我撰寫的練習用程式碼
1 | router.post('/create', function(req, res, next) { |
問題主要出在 res.end();
放的位置不對導致錯誤,所以正確位子應該這樣放
1 | router.post('/create', function(req, res, next) { |
原因是因為 Node.js 搞不清楚你到底要不要回傳資料給客戶端,簡單來講就是打架哩
科普一下 res.end & res.send
順便科普記錄一下這兩者是什麼東西
res.send
res.send 最簡單,簡單講就是伺服器要回傳給客戶端的資料時就要使用 res.send()
res.end
res.end 意思就是指,當沒有要回傳資料給客戶端時就結束
另外不要使用 另外不要使用來回傳資料,這影響效能問題。
那 res.send 後面一定要加上 res.end 嗎?
其實可以不用加上 res.end()
,當若使用 res.send()
就可以不用使用 res.end()
哩