---
# System prepended metadata

title: 檢核點 - 第二週
tags: [Node.js 直播班]

---

---
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>