# 🏅 Day 25 - validator 驗證 可以使用 [validator](https://www.npmjs.com/package/validator) 驗證表單資料 以下介紹幾個方法,詳細可再參考[文件說明](https://www.npmjs.com/package/validator#validators)查看所有可使用的方法 #### 驗證是否為信箱 `validator.isEmail()` ```javascript console.log(validator.isEmail('ex@mail.com')); // true console.log(validator.isEmail('123')); // false ``` #### 驗證長度 `validator.isLength()` ```javascript // 驗證字串長度是否至少有 3 碼以上 console.log(validator.isLength('12345', { min: 3 })); // true // 驗證字串長度是否最多 6 碼 console.log(validator.isLength('1234567', { max: 6 })); // false ``` ### 參考資源 - [validator 方法](https://github.com/validatorjs/validator.js#validators) 題目 --- 參考最終作業設計稿「註冊(錯誤訊息)」頁面,使用 validator 加入自訂的驗證,讓使用者註冊帳號時,可以先驗證資料確保符合正確格式 依照註解加入下方驗證資料格式需求,並搭配 `appError()` 自訂錯誤訊息,調整程式碼 `...` 的部分 `routes/users.js` ```javascript= router.post('/sign_up', handleErrorAsync(async (req, res, next) => { let { name, email, password } = req.body; // 加入驗證,確保使用者註冊資料符合格式 // 三個欄位皆必填 if (!name || !email || !password) { return next(appError(400, '請確保所有欄位皆填寫', next)); } // 暱稱 name 長度需至少 2 個字元以上 ... // 信箱 email 格式正確 ... // 密碼 password 長度至少 8 碼以上 ... const newUser = await User.create({ email, password, name }); res.status(200).json({ status: 'success', data: newUser }); })); ``` ## 回報流程 將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看) ![](https://i.imgur.com/vftL5i0.png) <!-- 解答: ```javascript= router.post('/sign_up', handleErrorAsync(async (req, res, next) => { let { name, email, password } = req.body; // 加入驗證,確保使用者註冊資料符合格式 // 三個欄位皆必填 if (!name || !email || !password) { return next(appError(400, '請確保所有欄位皆填寫', next)); } // 暱稱 name 長度需至少 2 個字元以上 if (!validator.isLength(name, { min: 2 })) { return next(appError(400, '暱稱需至少 2 個字元以上', next)); } // 信箱 email 格式正確 if (!validator.isEmail(email)) { return next(appError(400, 'Email 格式錯誤', next)); } // 密碼 password 長度至少 8 碼以上 if (!validator.isLength(password, { min: 8 })) { return next(appError(400, '密碼需至少 8 碼以上', next)); } const newUser = await User.create({ email, password, name }); res.status(200).json({ status: 'success', data: newUser }); })); ``` --> 回報區 --- <!-- 將答案貼至下方表格內,格式: | Discord 暱稱 | [CodePen](連結) | --> | Discord | CodePen / 答案 | |:-------------:|:-----------------:| | xxx | [CodePen]() | | 2魚 | [CodePen](https://codepen.io/ijrekmsn-the-sans/pen/LYvKyQP) | | jenny7532 | [CodePen](https://codepen.io/wei-chen-wu/pen/ExzYQYv) | | 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/Skf91_OM0) | |Lobinda|[HackMD](https://hackmd.io/@Lobinda/ryTPFFuMR)| | Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/dyEbeWz) | | william威良 | [CodePen](https://codepen.io/snowman12320/pen/pomzVrM?editors=1010) | | wei | [CodePen](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/HkqpijOfA)| | ej_chuang| [CodePen](https://codepen.io/EJChuang/pen/dyEbQbB)| | william_hsu| [CodePen](https://codepen.io/william8815/pen/BaeBGgY)| | Hank| [CodePen](https://codepen.io/tw1720/pen/qBGBddp)| | Aida| [CodePen](https://codepen.io/ada23410/pen/bGyGLNy?editors=0010)| | runweiting | [CodePen](https://codepen.io/weiting14/pen/ExzaJGj)| | Tiya | [CodePen](https://codepen.io/Tiya_blank/pen/rNbQPbY)| |Mei|[CodePen](https://codepen.io/l_umei/pen/abrdjME)| | fabio20 | [CodePen](https://codepen.io/fabio7621/pen/WNBowbQ) |