用户注册
前置内容
- 【云剪切板——统一后端返回数据格式】:https://www.hyz.cool/articles/209
- 【Nodejs express 连接Mysql】:https://www.hyz.cool/articles/207
- 【Nodejs express 连接 Redis】:https://www.hyz.cool/articles/208
路由
const express = require("express")
const UserController = express.Router();
const UserService = require("../services/UserService")
UserController.post("/register",UserService.register)
module.exports = UserController
js
数据库访问
import {Query} from "../services/MysqlService";
export const getUser = (username) => {
return Query("SELECT * FROM `tb_user` WHERE `name` = ? OR `email` = ? ", [username, username])
}
export const saveUser = (username,email,password,status,count,role) => {
return Query("INSERT INTO `tb_user` (`name`,`email`,`password`,`status`,`count`,`role`,`create_time`,`update_time`) VALUES (?,?,?,?,?,?,NOW(),NOW())",[username,email,password,status,count,role])
}
js
服务实现
export const register = [
validator.body("username", "用户名不能为空").isLength({min: 1})
.custom(username => {
return new Promise((resolve, reject) => {
UserDao.getUser(username).then(result => {
if (result) reject("用户名已存在")
else resolve(true)
}).catch(error => {
console.log("register check username error ...", error)
reject("检查用户名发生错误")
})
})
}),
validator.body("email", "邮箱不能为空").isLength({min: 1})
.custom(email => {
return new Promise((resolve, reject) => {
let reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
if (reg.test(email)) resolve(true)
else reject("邮箱格式不正确")
})
})
.custom(email => {
return new Promise((resolve, reject) => {
UserDao.getUser(email).then(result => {
if (result) reject("邮箱已存在")
else resolve(true)
}).catch(error => {
console.log("register check email error ...", error)
reject("检查邮箱发生错误")
})
})
}),
validator.body("code", "邮箱验证码不能为空").isLength({min: 1}),
validator.body("password", "密码不能为空").isLength({min: 1}),
validator.body("captcha", "图形验证码不能为空").isLength({min: 1}),
validator.body("captchaKey", "图形验证码Key不能为空").isLength({min: 1}),
(req, res, next) => {
let validationResult = validator.validationResult(req)
if (!validationResult.isEmpty()) return Result.result(res, Result.invalidParams(validationResult.array()))
let {username, email, code, password, captcha, captchaKey, status} = req.body
status = status === 1 ? status : 0
let count = 10
let role = 0
RedisService().get(KEY.EMAIL+email).then(emailCode =>{
if((code +"") !== (emailCode + "")) return Result.result(res,Result.failed("邮箱验证码错误"))
RedisService().get(KEY.CAPTCHA+captchaKey).then(captchaCode =>{
if((captcha +"").toLowerCase() !== (captchaCode + "").toLowerCase()) return Result.result(res,Result.failed("图形验证码错误"))
let newPass = bcrypt.hashSync(password,bcrypt.genSaltSync(10))
UserDao.saveUser(username,email,newPass,status,count,role).then(result=>{
return Result.result(res,Result.success("注册成功"))
}).catch(err=>{
return Result.result(res,Result.failed("保存用户失败,注册失败"))
})
}).catch(err=>{
return Result.result(res,Result.failed("查询图形验证码错误"))
})
}).catch(err=>{
return Result.result(res,Result.failed("查询邮箱验证码错误"))
})
}]
js