01注册接口的设计与实现

目录

一、用户表的设计

 二、nodejs代码

2.1 创建用户表模型

2.2 字段验证 安装express-validator库

2.2 验证规则

2.4 路由


一、用户表的设计

字段名数据类型-
_idString用户id
avatarUrlString用户头像
nicknameString用户昵称
birthDateString用户出生日期
usernameString用户名
passwordString用户密码(加密)
friendsArrary用户好友
addressObject用户地址

 二、nodejs代码

2.1 创建用户表模型

const mongoose = require('mongoose')
const userSchema = new mongoose.Schema({
  avatarUrl: String,
  address: Object,
  nickname: {
    type: String,
    required: true,
  },
  birthDate: {
    type: String,
    required: true,
  },
  username: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
  },
  friends: Array,
})
const userModel = mongoose.model('user', userSchema)

module.exports = userModel

2.2 字段验证 安装express-validator库

npm i express-validator

2.2 验证规则

const { check, validationResult } = require('express-validator')
const usernameReg = /^(?=.*[a-zA-Z])(?=.*\d).{5,10}$/
const passwordReg = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[@$!%*?&])[a-zA-Z\d@$!%*?&]{8,16}$/
const regRules = [
  check('birthDate').notEmpty().withMessage('出生日期为必填项'),
  check('nickname').notEmpty().withMessage('昵称为必填项'),
  check('username').notEmpty().withMessage('用户名为必填项').matches(usernameReg).withMessage('用户名需要包含数字和字母的5-10位组合'),
  check('password').notEmpty().withMessage('密码为必填项').matches(passwordReg).withMessage('密码需要包含英文字母大小写、数字和特殊符号的8-16位组合'),
]

2.4 路由

router.post('/reg', regRules, async (req, res, next) => {
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    return res.status(400).json({ code: -1, msg: errors.array() })
  }
  const { avatarId, address, birthDate, username, password, checkPass, nickname } = req.body
  if (password !== checkPass) return res.status(400).json({ code: -1, msg: '两次密码不一致' })
  const exist = await userModel.findOne({ username })
  if (exist) {
    res.json({ code: -1, msg: '注册失败,用户名已存在' })
    return
  }
  let avatarUrl = ''
  if (avatarId) {
    try {
      const item = await imgModel.findById(avatarId)
      avatarUrl = item.imgUrl
    } catch (error) {}
  }
  userModel.create({ avatarUrl, address, birthDate, username, password: md5(password), nickname }).then(
    result => {
      res.json({ code: 0, msg: '注册成功' })
    },
    err => {
      res.json({ code: -1, msg: '注册失败' })
    }
  )
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bbamx.

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值