--- tags: Node.js 直播班 --- # 檢核點 - 第二週 **重點觀念:** Mongoose 指令 連接資料庫、建立 Schema、Model CRUD 語法 **回覆參考:** ``` ... ``` --- - 一開始可以先用 postman 去故意打明顯錯誤,這樣在看 code 時,就不用去看 try catch 與欄位的部分,可以直接觀看同學如何拆分檔案 - 如果有學生會將 mongoose 的常見 errors 統一管理,有做到這段,可給他們星星 - 「在修改和刪除單一資料時,如果 id 的內容很類似,但資料庫實際卻沒有這筆 id 時,也會出現修改 or 刪除成功,但回傳 data 為 null」 -> mongoose 在某一次版本上,把他設立為 null,而非錯誤訊息,所以也是可以說,藉由這週教的,若是 null 則可以自訂錯誤訊息。 - **範例**: 假定資料庫的資料為 ```javascript { "_id": "62618abdd5747165e356d53b", "name": "Wow Wang", } ``` 嘗試修改 id: 62618abdd5747165e356d53a 的資料 ```javascript { "_id": "62618abdd5747165e356d53a", "name": "Wow", } ``` 結果 ```javascript { "status": "success", "data": null } ``` - **緣由**:傳入不存在的 ObjectId ~~mongoose 4.0 版將 findOneAndUpdate() 及 findByIdAndUpdate() 參數 options 裡的 new 統一設為 false [官方文件](https://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate)、[版本記錄](https://github.com/Automattic/mongoose/wiki/4.0-Release-Notes#backwards-breaking-changes)~~ - 補充:ObjectId 為 16 進制 24 個字元,不符合此條件即不屬於 ObjectId,反之則屬於 該建議只適用於不存在的 ObjectId,而非原本就非 ObjectId 之情況。沒有類似的 ObjectId 這種東西 - 若有嘗試撈出 controller,呼叫的部分可以將原本的 `getTodos(res, req.method)` 改為 `todoController.getTodos(res, req.method);` 在檢視上會比較好理解,是來自於哪個 require module,可讀性會較好 - 如果在 POST 或 PATCH 資料時,是將全部的 request body 的資料都加入,像是 [這個寫法]( https://github.com/eastm0108/posts_kata/blob/main/createPosts.js#L8-L9),需要建議新增指定欄位就好,還是這部分這樣寫也 ok > 可以先不提 > https://discord.com/channels/902012488495820882/940815804713275412/965533336711876618 - 如果 POST 或 PATCH 資料沒有加入 req.on('end', ...) 需要提出嗎 ~ 像是 [這個同學](https://github.com/qoo584769/week2-mongoose/blob/main/controller/postController.js#L4-L11),不確定是否是因這段有使用 async await 的關係,目前沒有加入好像也是可以正確新增和修改 > 會建議他補上,確保 AJAX 結束關閉 - 如果同學是設計 todos 路由,需要退回任務嗎(因第二週任務說明是說要設計 /posts 路由 > 退 ~ 避免後續繼續用 - 如果在測 API 的過程中,把 heroku 戳出 Application Error ,這樣需要退回任務嗎? 這邊附上兩個戳壞的 GitHub Repo https://github.com/Hsuan777/nodejs-posts-kata https://github.com/huang-hua1212/NodeSpringClass-Preview > 退 ~ - POST 或 PATCH 資料建議加入 `if(data.content !== undefined) { … }`的判斷,因最終作業會是臉書動態牆,不能送出空的訊息 目前雖有透過 model 驗證,但也建議可嘗試另外新增判斷 data.content,在 controllers 就先阻檔(第五週會再提到錯誤整合的部分) - 若 Schema 沒有設計可退件,可跟同學說明第二週是貼文的 Schema,須至少有 name、content、image …等等,可以參考第二週講義 <small>批改時若遇到問題或常見錯誤歡迎助教們新增上來</small>