---
tags: Node.js 直播班 - 2023 春季班
---
# 🏅 Day 26 - 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
});
}))
```
測試送出錯誤資料需正確回饋自訂的錯誤訊息
範例:

## 回報流程
將答案連結貼至底下回報就算完成了喔!
解答位置請參考下圖(需打開程式碼的部分觀看)

<!-- 解答:
```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
});
}))
```
-->
回報區
---
| 報數 | 組別/Discord 名字 | Codepen/HackMD/其他回饋 |
|:----:|:-----------------------:|:-------------------------------------------------------------------------:|
| 1 | 中 4 組 / jimkk159 | [HackMD - Day 26](https://hackmd.io/Yhf5dbS3Se2ZU0swL4nqHw) |
| 2 | 北 13 組 / Louisa | [GitHub - Day 26](https://github.com/louisa0416/NodejsEnterpriseClass/tree/master/daily-task/day26) |
| 3 | 北 16 組 / 文文 | [GitHub - Day 26](https://github.com/chiawen81/nodeJS_DailyTasks_d20/tree/4dffda71718e1348c696bcf3bfe074a0a2e53294) |
| 4 | 南 1 組 / hiYifang | [HackMD - Day 26](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/S1WEL_yPc) |