1,首先 在router/api.js 中引入数据库定义好的模型  /models/User.js

var User = require('../models/User')   //User返回的是一个构造函数,构造函数有静态方法,也有动态方法 。 通过这些方法去操作数据库

2,   引入之后通过 User 模型类 去操作数据库

3,查看 momgoose 相关文档  https://mongoosejs.com/docs/api.html

思维导图 :

具体代码文件 (红色字体为变动部分):

一, /router/api.js   。

var express = require('express')
var router = express.Router()
var User = require('../models/User') //User返回的是一个构造函数,构造函数有静态方法,也有动态方法 。 通过这些方法去操作数据库
/**
* 统一接口的返回格式
*/
var responseData;
router.use((req,res,next)=>{
  //初始化返回数据
  responseData = {
  code:0 , // 返回的错误码,默认为0 , 0表示没有错误
  message:'' , // 错误信息 。没有错误的情况下默认为空
}
 
/**
* 【 不执行 next ,程序会卡在此处 】
*/
  next()
})
/**
* 用户注册
* 注册逻辑
*
* 1,用户名,密码不能为空
* 2,两次输入密码是否一致
*
* 1,用户是否已经被注册
* 数据库查询
*/
router.post('/user/register',(req,res,next)=>{
  console.log(req.body)
 
  // 将 传过来的数据 保存 到变量中
  var username = req.body.username
  var password = req.body.password
  var repassword = req.body.repassword
  //判断用户是否为空
  if(username == ''){
    responseData.code = 1
    responseData.message = '用户名不能为空'
      
    /**
    * 将数据返回前端
    * 以 json 的形式
    */
    res.json(responseData)
    return
  }
  //判断密码是否为空
  if(password == ''){
    responseData.code = 2
    responseData.message = '密码不能为空'
    res.json(responseData)
    return
  }
  // 判断两次输入密码是否一致
  if(password != repassword){
    responseData.code = 3
    responseData.message = '两次输入密码不一致'
    res.json(responseData)
    return
  }
 
  /**
  * 用户名在数据库中是否存在
  * 1,首先要去引入数据库定义好的模型 /models/User.js
  */
  User.findOne({
    username:username //在数据库中查询 username 与 这个username 相等 , 返回的是一个 mongoose 对象
  }).then((userInfo)=>{
    console.log(userInfo)
    if(userInfo){
      responseData.code = 4
      responseData.message = '用户名已存在'
      res.json(responseData)
      return
    }
    /**
    * 将用户注册的信息提交到数据库
    * 直接操作 User 类 即可
    */
    var user = new User({
      username:username,
      password:password
    })
 
    return user.save()
  
  }).then((newUserInfo)=>{
    console.log(newUserInfo)  
    //注册成功
    responseData.message = '注册成功'
    res.json(responseData)
  })
 
})
  module.exports = router
 
二, /public/js/index.js  
 
$(function(){
  var $register = $('#register');
  var $login = $('#login');
 
  $register.find('a.change').on('click',()=>{
    $login.show();
    $register.hide();
  })
  $login.find('a.change').on('click',()=>{
    $login.hide();
    $register.show();
  })
  /**
  * 点击注册按钮 =》 通过 ajax =》提交数据
  */
  $register.find('button').on('click',()=>{
    $.ajax({
      type:'post',
      url:'/api/user/register',
      data:{
        username: $register.find('[name="username"]').val(),
        password: $register.find('[name="password"]').val(),
        repassword: $register.find('[name="repassword"]').val(),
      },
      dataType: 'json',
      success:function(data){
        console.log(data)
        $register.find('.info').html(data.message)
        if(!data.code){
          //注册成功,跳转到登陆面板
          setTimeout(()=>{
            $login.show();
            $register.hide();
          },1000)
        }
      }
    });
  })
})

8 ~ express ~ 基于数据库的验证的更多相关文章

  1. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  2. Web APIs 基于令牌TOKEN验证的实现

    Web APIs 基于令牌TOKEN验证的实现 概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但 ...

  3. 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)

            目录:            第1版:http://blog.csdn.net/vipbooks/article/details/51912143            第2版:htt ...

  4. Spring MVC 项目搭建 -5- spring security 使用数据库进行验证

    Spring MVC 项目搭建 -5- spring security 使用数据库进行验证 1.创建数据表格(这里使用的是mysql) CREATE TABLE security_role ( id ...

  5. SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)

    SQL SERVER 基于数据库镜像的主从同步 Author:chaoqun.guo    createtime:2019-03-26 目录 SQL SERVER 基于数据库镜像的主从同步... 1 ...

  6. ASP.NET Web APIs 基于令牌TOKEN验证的实现(保存到DB的Token)

    http://www.cnblogs.com/niuww/p/5639637.html 保存到DB的Token 基于.Net Framework 4.0 Web API开发(4):ASP.NET We ...

  7. SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例

    1.前言 本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelp ...

  8. 在 Linux 客户端配置基于 Kerberos 身份验证的 NFS 服务器

    在这篇文章中我们会介绍配置基于 Kerberos 身份验证的 NFS 共享的整个流程.假设你已经配置好了一个 NFS 服务器和一个客户端.如果还没有,可以参考 安装和配置 NFS 服务器[2] - 它 ...

  9. SpringBoot基于数据库实现简单的分布式锁

    本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...

随机推荐

  1. JAVA地址栏重写很详细

    这几天蛋疼.看看别人url重写是怎么搞的..1.解释下什么事url重写,以及它的优缺点: URL重写,其实就是把带一大堆参数的url,变成一个看上去很规矩的url.例:/viewthread.jsp? ...

  2. Java数组去重的方法

    //第一种方式:最开始想到的是利用Set集合的不可重复性进行元素过滤 public static Object[] oneClear(Object[] arr){  Set set = new Has ...

  3. 2-10 就业课(2.0)-oozie:12、cm环境搭建的基础环境准备

    8.clouderaManager5.14.0环境安装搭建 Cloudera Manager是cloudera公司提供的一种大数据的解决方案,可以通过ClouderaManager管理界面来对我们的集 ...

  4. maven intall 命令用法

    作用:将自定义maven项目  打成maven依赖存放到本地库,我们可以在另一个项目pom文件中加入相应依赖,刷新mavne即可将其加入项目中使用 使用说明:win+R 打开命令窗口,将目录切换至项目 ...

  5. R分析实现对招聘网站薪资预测分析

    1.首先确定数据分析目标——薪酬受哪些因素影响 确定变量: 因变量:薪资 自变量:(定性)-- 公司类别.公司规模.地区.行业类别.学历要求.软件要求. (定量)-- 经验要求(数值型) 分析目标:建 ...

  6. php截取指定两个字符之间的字符串

    //截取指定两个字符之间的字符串 public function cut($begin,$end,$str){ $b = mb_strpos($str,$begin) + mb_strlen($beg ...

  7. linux网络编程之shutdown() 与 close()函数详解

    linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这 ...

  8. Day4 - I - Trucking HDU - 2962

    A certain local trucking company would like to transport some goods on a cargo truck from one place ...

  9. UVA 12510/CSU 1119 Collecting Coins DFS

    前年的省赛题,难点在于这个石头的推移不太好处理 后来还是看了阳神当年的省赛总结,发现这个石头这里,因为就四五个子,就暴力dfs处理即可.先把石头当做普通障碍,进行一遍全图的dfs或者bfs,找到可以找 ...

  10. Angular2的双向数据绑定

    什么是双向绑定 如图:   双向绑定.jpg 双向绑定机制维护了页面(View)与数据(Data)的一致性.如今,MVVM已经是前段流行框架必不可少的一部分. Angular2中的双向绑定 双向绑定, ...