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. JavaScript(3)---事件冒泡、事件捕获

    JavaScript(3)---事件冒泡与事件捕获 一.理解冒泡与捕获 假设有这么一段代码 <body> <div><p>标签</p> </div ...

  2. IOS TableView 用法

    1.在视图上创建TableView( 拖控件),为ViewController创建UITableView属性(链接至TableView)和NSArray属性(存储数据) ViewController. ...

  3. FTP大量数据(百万级数据)传输尝试

    接上篇<Java FTPClient 大量数据传输的问题(未解决)> 因为数据量过大 FTPClient获取文件列表信息会出现不稳定的问题,找了很多方法都没有解决. 网上找的这一篇文章 h ...

  4. Lesson 3 Matterhorn man

    What was the main objective of early mountain climbers? Morden alpinists try to climb mountains by a ...

  5. Lesson 1 Finding fossil man

    Why are legends handed down by storytellers useful? We can read of things that happend 5000 years ag ...

  6. Echarts学习宝典

    1,可以使用百度图说中的图表代码复制到option中,还可在百度图说中以可视化的方式编辑数据,调整参数和编辑样式.(也可借助百度图说更改部分样式) 2,借助网站 https://echarts.bai ...

  7. Jquery所有Dom操作汇总

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 题解 loj2065 「SDOI2016」模式字符串

    点分治. 考虑经过当前分治中心\(u\)的点对数量. 这种数点对数的问题,有一个套路.我们可以依次考虑\(u\)的每个儿子,看用当前的儿子,能和之前已经考虑过的所有儿子,组成多少点对.这样所有合法的点 ...

  9. ng-trim

    最近新做了一个需求,要求在angular.js的input 文本框中做到去除首尾空格,实现精确查询. 查了很多正则表达式,后来才发现angular.js项目中默认就能去除首尾空格,ng-trim  默 ...

  10. 054、Java中使用for循环第二种写法实现1~100的累加

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...