--- tags: Node.js 直播班 - 2022 春季班 --- # 🏅 Day 27 ## validator 驗證 使用 [validator](https://www.npmjs.com/package/validator) 驗證使用者註冊資料 ### 參考資源 [validator 方法](https://github.com/validatorjs/validator.js#validators) ### 題目(將答案寫在 GitHub 並提交至回報區) 延續前一天的每日任務,參考設計稿的[註冊(錯誤訊息)頁面](https://xd.adobe.com/view/c0763dbe-fc15-42e8-be0b-8956ed03e675-9525/screen/1e66e82f-3514-46bf-8b3f-2d1e8260acd4/specs/),安裝並使用 validator 提供的方法,加入自訂的驗證(暱稱、密碼長度、email 格式 ... 等等) 在接收到 req.body 的註冊資料後驗證資料是否符合格式 ```javascript router.post('/sign_up', handleErrorAsync(async(req, res, next) =>{ let { email, password, confirmPassword, name } = req.body; // 加入驗證,確保使用者註冊資料符合格式 ... // 加密密碼 password = const newUser = await User.create({ email, password, name }); res.status(200).json({ status: 'success', data: newUser }); })) ``` 測試送出錯誤資料需正確回饋自訂的錯誤訊息 範例 ![](https://i.imgur.com/KBgdaJM.png=600x) 回報流程 --- 請同學依照下圖教學觀看解答、回報答案: ![](https://i.imgur.com/QtL8zEW.png) 回報格式:請在「回報區」貼上 CodePen 或 HackMD 連結回報答案 (為了統計人數,請同學依序加上「報數」) <!-- 解答 ```javascript= // routes/users.js // 驗證條件可依據設計稿新增暱稱字元長度驗證 router.post('/sign_up', handleErrorAsync(async(req, res, next) =>{ let { email, password, confirmPassword, name } = req.body; // 內容不可為空 if(!email||!password||!confirmPassword||!name){ return next(appError("400","欄位未填寫正確!",next)); } // 密碼正確 if(password!==confirmPassword){ return next(appError("400","密碼不一致!",next)); } // 密碼 8 碼以上 if(!validator.isLength(password,{min:8})){ return next(appError("400","密碼字數低於 8 碼",next)); } // 是否為 Email if(!validator.isEmail(email)){ return next(appError("400","Email 格式不正確",next)); } // 加密密碼 password = await bcrypt.hash(password,12); const newUser = await User.create({ email, password, name }); res.status(200).json({ status: 'success', data: newUser }); })) ``` --> 回報區 --- | 報數 | 組別 / 名字 | codepen / hackMD / 其他回饋 | |:----:| ------------------ | ------------------------------------------------------------- | | 1 | 第 14 組|East | [HackMD](https://hackmd.io/-_z8rEgzQ-ecBE7eIYc8ow) | | 2 | 第 4 組|小宥 | [HackMD](https://hackmd.io/GWA1BteUTwujkPP4mc7hkA) | | 3 | 第 3 組|hiYifang | [HackMD](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/S1WEL_yPc) | | 4 | 第 4 組| 苡安 | [HackMD](https://hackmd.io/_f05FfIaTUq4AMpchVbEJA) | | 5 | 第 11 組| Han Lai | [HackMD](https://hackmd.io/3pG_KaTvT8u3e4omLa6gBw?view) | | 6 |第 9 組 / konstante |[HackMD](https://hackmd.io/E-YSbtSkSj-0WRgYQCnVVQ?edit) | | 7 | 第 9 組|黃士桓 | [HackMD](https://hackmd.io/H3vqPOSvT6OIEWD37ng0jA) | | 8 | 第 2 組|joe | [HackMD](https://hackmd.io/uaRTw9c0TgOrADyXMmGL0Q?view#516-validator) | | 9 | 第 5 組|Hazel | [HackMD@Hazel](https://hackmd.io/@hazelwu/day27) | | 10 | 第 3 組|Hobby | [HackMD](https://hackmd.io/@hobbyling/day27) | | 11 | 第 7 組|jason06286 | [HackMD](https://hackmd.io/3k_2V8JjSKexEzs_VEprGw) | | 12 | 第 12 組|Jimmy | [HackMD](https://hackmd.io/xMn2kXrRQI6a-ka6bLylIQ) | | 13 | 第 2 組|wendy | [HackMD](https://hackmd.io/80FIwll1QUa4u0-WoBv-hQ#20220516) | | 14 | 第 16 組|皓皓 | [HackMD](https://hackmd.io/@cutecat8110/rkwseUFqc) |