用户注册

前置内容

  1. 【云剪切板——统一后端返回数据格式】:https://www.hyz.cool/articles/209
  2. 【Nodejs express 连接Mysql】:https://www.hyz.cool/articles/207
  3. 【Nodejs express 连接 Redis】:https://www.hyz.cool/articles/208

路由

  • UserController.js
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

服务实现

  • UserService.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
打赏
  • 微信
  • 支付宝
评论
来发评论吧~
···

歌手: