目录
一、用户表的设计
字段名 | 数据类型 | - |
---|---|---|
_id | String | 用户id |
avatarUrl | String | 用户头像 |
nickname | String | 用户昵称 |
birthDate | String | 用户出生日期 |
username | String | 用户名 |
password | String | 用户密码(加密) |
friends | Arrary | 用户好友 |
address | Object | 用户地址 |
二、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: '注册失败' }) } ) })