美文网首页功能模块
注册时自动验证是否存在重名

注册时自动验证是否存在重名

作者: 千茉紫依 | 来源:发表于2019-03-22 08:31 被阅读0次

思路:在用户输入昵称之后,输入框失去焦点时,前端自动发送一个验证请求,在后端查询数据库,将值返回给前端,前端处理后反馈给用户

实现:本文中使用到了element、koa和mongoose

一,使用element编写注册组件结构

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="ruleForm">
      <el-form-item prop="name">
          <el-input v-model="ruleForm.name" placeholder="你的昵称">
              <i slot="prefix" class="el-icon-edit el-input__icon"></i>
          </el-input>
      </el-form-item>
  </el-form>

在el-form元素中,使用model与data进行双向绑定,使用rules进行数据验证,ref类似于dom中的id,可以使用vue的this.refs[refName]方法获取vue虚拟dom,都是固定写法,缺一不可。

子元素el-form-item中使用prop将自己与ruleForm映射,使得它的子节点el-input 可以使用双向绑定,将值传递给rules。

二,在data中编写验证函数

  data() {
        const checkRepeat = async (rule, value, callback) => {
            let {
                status,
                data: { code, msg }
            } = await this.$axios.get(`/user/checkRepeat?name=${value}`);
            if (code == 2000) {
                callback();
            } else {
                callback(new Error(msg));
            }
        };
        return {
            ruleForm: {
                name: ''
            },
            rules: {
              name: [
                 { required: true, message: '请输入昵称', trigger: 'blur' },
                 { min: 1, max: 7, message: '长度为1-7字符', trigger: 'blur' },
                 { validator: checkRepeat, trigger: 'blur' }
               ]
            }
        };
    }

首先看rules项,他是element表单组件的默认验证方法,按照从上至下的顺序执行验证,具体解释如下:

  /*为必填项,若为空显示错误 '请输入昵称',触发时机为输入框失去焦点*/
  { required: true, message: '请输入昵称', trigger: 'blur' },

  /*长度为1-7个字符,若超出显示错误 '长度为1-7字符',触发时机为输入框失去焦点*/
  { min: 1, max: 7, message: '长度为1-7字符', trigger: 'blur' },

   /*使用自定义验证策略checkRepeat,触发时机为输入框失去焦点*/
  { validator: checkRepeat, trigger: 'blur' }

这里checkRepeat 是个异步函数,他通过axios向后端koa中间件请求checkRepeat函数,参数值为name,请求成功回调为空,失败则显示错误,这里的value就是ruleForm.name的值,在上文中我们通过prop将ruleForm.name与rules.name.value进行了绑定。

三、在koa中编写路由中间件

let Users = require('../model/Users') //获取mongoose中定义的model
let router = new Router({ prefix: "/user" }) //添加路由前缀

router.get('/checkRepeat', async (ctx) => {
    let { name } = ctx.request.query //获取前端传来的参数值name
    let user = await Users.findOne({ name }) //使用mongoose进行数据库查询
    if (user) {  //如果存在用户,则返回4003错误
        ctx.body = {
            code: 4003,
            msg: "昵称" + name + "已被使用"
        }
    } else {  //如果不存在用户,则返回2000,表示可以注册
        ctx.body = {
            code: 2000,
            msg: "ok"
        }
    }
})

这时在前端checkRepeat 函数中,通过判断返回的code值,就可以对错误值进行自动处理

    const checkRepeat = async (rule, value, callback) => {
            let {
                status,
                data: { code, msg }
            } = await this.$axios.get(`/user/checkRepeat?name=${value}`);
            if (code == 2000) {
                callback();
            } else {
                //在callback前,可在此处将错误信息推送至页面
                callback(new Error(msg));
            }
        };

注册时自动验证是否存在重名功能完成

相关文章

  • 注册时自动验证是否存在重名

    思路:在用户输入昵称之后,输入框失去焦点时,前端自动发送一个验证请求,在后端查询数据库,将值返回给前端,前端处理后...

  • 异步验证是否重名、用户名是否存在

    layout: posttitle: 异步验证是否重名、用户名是否存在subtitle: 验...

  • 项目功能点总结

    一、登录注册 用户注册 手机号验证 格式校验(正则表达式) 唯一性校验(查询数据库手机号是否存在) 短信验证码 发...

  • Android注册时总是出现"验证码不正确"

    【背景】在登录注册界面 往往存在验证码 功能,注册或者登录的时候,将手机号码,验证码,密码一并提 交到后台。这个时...

  • > Entry name 'com/***/***/***/**

    请检查是否有重名文件存在同一个目录下。

  • 简单需求分析

    用户模块 1注册页 注册时验证用户名是否被注册 完成用户信息注册 2登录页 显示登录页 实现用户的登录功能 3 用...

  • 如何快速制造OOM

    为了验证JVM发生OOM时自动保存dump的参数配置是否正确,需要验证一下,所以有了这次的验证过程。 OOM OO...

  • 注册时验证js

    //检测电话号码是否正 } } //检测城市function check_city(city){// alert...

  • rails 用户注册 邮箱验证码

    rails在账号注册时,通过邮件形式,发送验证码, 进行注册验证。 项目中本计划用短信进行注册验证。但开发阶段想想...

  • 简单的“用户登陆”测试

    及格: 输入已注册的用户名和正确的密码,验证是否登录成功; 输入已注册的用户名和不正确的密码,验证是否登录失败,并...

网友评论

    本文标题:注册时自动验证是否存在重名

    本文链接:https://www.haomeiwen.com/subject/daphvqtx.html