---
# System prepended metadata

title: "\U0001F3C5 Day 27"
tags: [Node.js 直播班 - 2022 春季班]

---

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


