• Node + MVC模式 登录注册 小示例


    逻辑
    MVC模式

     

    文件部署
    static静态资源文件(js css img html)放在plugin文件夹下
    给js 文件夹下创建base common page plugling
    其他img css类似 
    1⃣️ 将公共的头部导航条 进行抽离  如 header 登陆/注册 模态框 独立成块 然后单个ii插入到公共头部导航上: 复用性高 独立性强 可任意搭配 如第二个页面没有登陆注册 只需放置一个header 
    2⃣️
    3⃣️
     
    编写前端js代码----获取input框里面的值  进行 ajax请求
     ①获取到input框里面的值
       首先需要找到各元素 然后给btn加点击事件使用事件代理的方式 点击的时候执行一个方法 var 一个对象 username:username.val() password....
    存储用户名和密码
    ②获取到input框的值以后 进行ajax请求
    $.ajax({
        type:"POST",
        url:""//后台拿接口--------
        data:data//上面获取的值 --数据
        dataType:"json"//值是以一个json格式
        success:$.proxy(this.handlesuccCb,this)
    })
    写一个成功的回调
    handle:function(data){
    console.log(data)
    }
     
     
    后台
     
    ③开始需求分析
     
    如何定义接口格式。。
    注册
    接口地址:
    /api/user/register------------
     
     
    参数:
    username:
    password:
     
     
    返回值:
    成功{
    status:1,
    info:“成功”
    }
     
    失败
    {
    status.0,
    info:"失败"
    }
     
    ④前台给数据 后台如何接收?
    在路由中书写js
    前台如果是get请求的话 数据放在req.query 通过url的参数进行提交;post请求是放在 req.body
     
    router.get/post("接口地址",(req,res)=>{
    console.log(req.query/req.body)
    })
    console XHR请求页可以看到pedding提交的数据 服务器端也接收到数据
     
    接口对接成功之后  要开始MVC模式
    数据放在控制层Controller 在控制层写业务逻辑 怎么放? 方法写在model数据库 提供一个储存数据的方法  储存数据需要先连接到数据库dataTool
     
     
    api ----回调函数放在控制层
     

     

    dataTool
     

     

    Model ----数据层 创建了一个供控制层使用的存储数据的方法

     

     

    Controller ----使用数据层的存储方法

     

     

    注册的信息 需要在服务器查找 判定length 查找username 存在返回相关username ,没有返回空。 有就注册失败 没有就可以成功注册 需要一个查找的功能   存在会返回一个用户信息数组对象  不存在则返回空数组
    功能----数据层写方法Moudle
     
    User
    ||
    const User=mongoose.mongoose.model('user',{
    username:String,
    password:String
    });
     
    const findData = (userInfo,succCb)=>{
    User.find(userInfo).then((result)=>{
    succCb&&succCb(result)
    })
    }
    方法同样要导出供con控制层使用
    控制层里面 是需要先查找后保存
    if 用户名重复 else 注册成功
     
    实际开发中 密码存在于服务器是加密的  常见的加密

    MD5   MD5是一种常用的哈希算法,用于给任意数据一个“签名”。这个签名通常用一个十六进制的字符串表示

     

    const crypto = require('crypto');
    
    const hash = crypto.createHash('md5');
    
    // 可任意多次调用update():
    hash.update('Hello, world!');
    hash.update('Hello, nodejs!');
    
    console.log(hash.digest('hex')); // 7e1977739c748beac0c0fd14fd26a544

     

     

    SHA1 

    如果要计算SHA1,只需要把'md5'改成'sha1',就可以得到SHA1的结果1f32b9c9932c02227819a4151feed43e131aca40

    还可以使用更安全的sha256sha512

    Hmac    hmac算法也是一种哈希算法,它可以利用MD5或SHA1等哈希算法。不同的是,Hmac还需要一个密钥 Hmac理解为用随机数“增强”的哈希算法

    AES    AES是一种常用的对称加密算法,加解密都用同一个密钥。crypto模块提供了AES支持,但是需要自己封装好函数

    Diffie-Hellman  DH算法是一种密钥交换协议,它可以让双方在不泄漏密钥的情况下协商出一个密钥来

     

    证书   crypto模块也可以处理数字证书。数字证书通常用在SSL连接,也就是Web的https连接。一般情况下,https连接只需要处理服务器端的单向认证,如无特殊需求(例如自己作为Root给客户发认证证书),建议用反向代理服务器如Nginx等Web服务器去处理证书。

     

     

    原生js中设置加密运行速度慢 代码多 

     

    node中提供了一种加密 模块

     

    //引入加密模块
     
    const crypto = require('crypto');
    //创建一个加密的算法
    const hash = crypto.createHash('sha256');
    //对数据的一个加密
    hash.update(password);
    //得到加密以后的数据
    userModel.registerSave({username:username,password:hash.digest('hex')},()=>{
    res.json({
    status:1,
    info:"成功"
    })

     

    加密的密码

     

     

     注册页面基本完成

     

    登录页面
     前端代码
    给登录按钮加点击事件用事件代理 
    获取到input框的内容
    点击登录的时候获取到input框的值
    var data 一个对象存起来
     
    console data 查看是否有值
     
    需求分析
     
    使用ajax传递给后台
    和后台商议url接口 参数 返回值 接口格式。。。
    走api路由 /api开头 然后找到api.js 格式还是后台商议的格式
     
    然后把api路由里面的那个回调函数给到控制层
     
    使用findData这个方法 比对用户名是否存在于(判断result.length)数据库 比对密码是否正确 密码还是进行加密后的
     
    如何长期保持一个登录的状态 刷新之后还在
    前端cookie存储不安全 用户可以更改里面的参数 只需要cookie储存用户的一个id 然后其他参数返回给后台的session session通过判断id的状态值 来验证是否登陆成功
     
    Session工作流程
    ①前端发送登录状态给后端 (把用户的读写权限保存在服务器session)
    ②后端进行验证如果验证成功以后 会把你的状态保存在session中
    ③后端给前端发送一个cookie字符串 当前用户的一个
    id
    ④ 判断一下当前用户的id值 如1为登录状态 0 非登录状态
     
     
    百度首页 登录账号 控制台document.cookie查看到cookie  BD_HOME=1 未登录 BD_HOME=0 ------id值----登录状态
    Application 查看cookie 清除所有请求 刷新页面 会变为非登录状态
     

     

     

    $ npm install cookie-session
    在配置app.js中引入session
    使用中间件use 对session进行一个配置
     
    app.use(cookieSession({
    name: 'miao',  任意名字 存储时的一个名字
    secret:"qazxcvbnm",  加密的字符
    maxAge:7 * 24 * 60 * 60 * 1000 // 24 hours  存储的时间
    }))
    
    去到登录的方法页面 控制层 成功时设定req.session.login = true ---login可任意定义
     
    服务器返回一个登录状态 
     
    在header中创建一个方法 传递一个ajax请求给服务器
    判断 req.session.login是否为true 为true表示已经登陆了
    返回一个登录的json对象 里面有状态码 提示信息
    else....
     
    这个时候就可以根据状态码来判定用户的登录状态
    如果登陆了 就把登录的名字给到header 替换 页面上的“”登录“” 达到登录显示用户名的效果

     

    -------------------整理于yingxiang 20190218
  • 相关阅读:
    u盘安装linux提示:Loader exited unexpectedly!……install exitedabnormally
    接口练习代码
    c#里面的索引器注意
    MD5方法代码(生成小写的md5) C#版本
    sql 中set和select区别
    sql 中convert和cast区别
    数据库触发器inserted和deleted详解
    (转载)处理delete不走索引导致锁等待异常
    Mysql Using FileSort问题
    (转)[MySQL高级](一) EXPLAIN用法和结果分析
  • 原文地址:https://www.cnblogs.com/522040-m/p/10396863.html
Copyright © 2020-2023  润新知