前后台分离开发登录注册

前后台分离开发登录注册

1. 新建

初始化–>下载相关模块
jquery

2. 把相关的html页面写好

3. 开始完成注册页面的所有功能

3.1启动数据库(mongodb)
3.2在后台的js页面中开始准备写注册相关的路由

3.2.1下载相关的模块  express mongoose crypto    
3.2.2开始搭建服务器与路由  
3.2.3开始尝试用前台html页面使用ajax来请求 
**我们刚才写好的路由进行测试并且先把输入框的值发送到node中**  
3.2.4先测试值是否正常,然后在开始加密数据
3.2.5开始往数据库存  

4. 测试注册–>开始完成登录

4.1开始完成登录页面
4.2使用ajax从登陆页面向后台登录的路由发送数据(使用post)

   4.2.1  
   使用post方式发送对于前台页面来说没有问题但是后台在接收post的时候就比较麻烦了 (因为node不知道怎么解析post 所以我们需要使用post的解析模块 body-parser)  
   4.2.2  
   下载post的解析模块 npm install --save body-parser 并且引用  
   4.2.3  
   使用post解析模块  
   4.2.4    
   把这个解析模块注入到post的路由中  
   4.2.5  
   开始接受数据  

4.3加密当前钱密码
4.4数据库查询

5. 优化页面效果,比如跳转等待的效果,三秒跳转

Session的使用

使用session 必须下载express-session这个模块npm install --save express-session

完善之前的登录注册demo

1. 在用户登录之后 存储一个session,在session里面存储两条数据一个是用户的登录状态,一个是用户名

2. 在用户必须登录之后再能访问首页 所以在页面加载完毕之后我会自动的发送一个ajax到后台去查询当前的用户登录状态如果为true那就表明他登录了 反之 帮助用户跳转到登录页面

3. 去后台完成session的查询配合首页的ajax

新建了一个路由用来查询登录存储的session
但是注意,打印出来的结果会发现没有之前存的数据(数据存储绝对没有问题)因为跨域了,所以要解决:

解决方式

创建一个用node 创建webserver

1. 创建一个文件夹

2. 把你所有的html css img做这些内容放到刚才新建的文件夹中

3.在后台中加入中间件用来指定访问静态文件的路径 app.use(express.static(path.join(__dirname, “文件夹名”)));

4. 运行页面(html页面中引用的内容,比如jquery必须也放到那个文件夹中,修改引用路径)

现在已经全部完毕了,可以访问页面了,启动服务

5. 优化首页的session查询逻辑

后台代码:

//启动服务
var express = require("express");
var app = express();
//3.引入加密模块
var crypto = require("crypto");
//5.引入mongoose模块
var mongoose = require("mongoose");
//10.引入post的解析模块body-parser
var bodyParser = require("body-parser");
//11.使用bodyParse下的解析post功能
var uE = bodyParser.urlencoded({
    extended: false
});
//15.引用session模块
var session = require("express-session");
//16.初始化session
app.use(session({
    secret: "mgd12345", //设置密钥,内容可以随便写
    cookie: {
        maxAge: 5 * 1000
    }, //设置cookie的过期时间,80s后session和响应的cookie失效过期
    resave: true, //强制保存 如果session没有被修改也要重新保存
    saveUninitialized: false //如果原先没有session那么就设置 否则不设置
}))
//19引用path模块
var path=require("path");
//18.设置webserver(静态资源文件)
// 所以要使用path.join(__dirname, "status")来吧文件夹的地址和要读取的文件夹进行拼接用来告诉express
// 从哪里找静态文件
// 注意path是一个工具模块(path是内置模块直接引)
// app.use(express.static(path.join(__dirname, "status")));
app.use(express.static(path.join(__dirname,"status")));
//2.解决跨域
app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
    next();
})
//7.定义集合,不能将集合放到路由内部
var dbclt = mongoose.model("no1", {
    uname: String,
    upwd: String
})
//1.得到前台的数据
app.get("/reg", function (req, res) {
    var uname = req.query.uname;
    var upwd = req.query.pwd;
    console.log(uname + "---" + upwd);
    //4.开始加密数据
    var mb5Pwd = crypto.createHash('md5').update(upwd).digest('hex');
    console.log(mb5Pwd);
    //6.连接数据库
    mongoose.connect("mongodb://localhost:27017/mgd", {
        useNewUrlParser: true
    }, function (err) {
        if (err) {
            console.log("数据库连接失败" + err);
        } else {
            console.log("数据库连接成功");
            //8.设置存入的数据
            var userdemo = new dbclt({
                uname,
                upwd: mb5Pwd
            })
            //9.开始存储
            userdemo.save().then(
                (ok) => {
                    res.send({
                        mes: "注册成功",
                        status: 200,
                        linkid: 1
                    })
                },
                (err) => {
                    res.send({
                        mes: "注册失败",
                        status: 200,
                        linkid: 1
                    })
                }
            )
        }
    })
    // res.send("ok");
})
//把解析模块注入到post的路由当中
app.post("/login", uE, function (req, res) {
    //12.开始接受前台传过来的数据
    var uname = req.body.uname;
    var upwd = req.body.upwd;
    console.log(uname + "===" + upwd);
    //13.开始加密当前密码
    var mb5Pwd = crypto.createHash('md5').update(upwd).digest('hex');
    // var md5Pwd = crypto.createHash('md5').update(upwd).digest('hex');
    //14.查询数据库
    mongoose.connect("mongodb://localhost:27017/mgd", {
        useNewUrlParser: true
    }, function (err) {
        if (err) {
            console.log("数据库连接失败" + err);
        } else {
            console.log("数据库连接成功");
            dbclt.find({
                uname: uname,
                upwd: mb5Pwd
            }).then(
                (ok) => {
                    // 在查询的时候成功可能有两种结果 第一种查出来值了 第二种没有查出来但是反悔了一个空数组
                    if (ok.length > 0) {
                        // ****17****session步骤(3)
                        req.session.loginok=true,
                        req.session.uname=uname,
                        res.send({
                            mes: "登录成功",
                            status: 200,
                            linkid: 2
                        });
                    } else if (ok.length == 0) {
                        res.send({
                            mes: "登录失败",
                            status: 200,
                            linkid: 3
                        });
                    }
                },
                (err) => {
                    res.send({
                        mes: "连接超时,请稍后再试",
                        status: 500,
                        linkid: 4
                    })
                }
            )
        }
    })
})
app.get("/index",function(req,res){
    console.log(req.session);
    if(req.session.loginok==true){
        res.send({mes:"用户登录过",status:200,linkid:8,username:req.session.uname});
    }else{
        res.send({mes:"用户没有登录过",status:200,linkid:9})
    }
})
app.listen(3000);

注册代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
<script src="jquery/dist/jquery.min.js"></script>

    <title>注册</title>
</head>

<body>
    <input type="text" name="uname" id="uname">
    <br />
    <input type="text" name="pwd" id="pwd">
    <br />
    <input type="button" value="注册" id="btnId" onclick="testf()">
</body>

</html>
<script>
    function testf() {
        //得到输入框的值
        var uname = $("#uname").val();
        var pwd = $("#pwd").val();
        console.log(uname + "----" + pwd);
        //向后台发送ajax请求
        $.ajax({
            url: "http://localhost:3000/reg",
            type: "get",
            data: {uname, pwd},
            success(data) {
                console.log(data);
            }
        })
    }
</script>

登录代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>登录</title>
</head>
<body>
    <input type="text" name="uname" id="uname">
    <br/>
    <input type="text" name="pwd" id="pwd">
    <br>
    <input type="button" value="登录" id="btnId">
</body>
</html>
<script src="jquery/dist/jquery.min.js"></script>
<script>
    $("#btnId").click(function(){
        var uname=$("#uname").val();
        var upwd=$("#pwd").val();
        console.log(uname+"---"+upwd);
        $.ajax({
            type: "post",
            url: "http://localhost:3000/login",
            data: {
                uname,
                upwd
            },
            success: function (data) {
                console.log(data);
                if(data.linkid==2){
                    alert(data.mes);
                    location.href="index.html";
                }else{
                    alert(data.mes)
                }
            }
        });
    })
</script>

首页代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>首页</title>
</head>

<body>
    <h1>我是首页 用户必须登录之后再能访问我 所以在页面加载完毕之后我会自动的发送一个ajax到后台
        去查询当前的用户登录状态如果为true那就表明他登录了 反之 帮助用户跳转到登录页面
    </h1>
</body>

</html>
<script src="jquery/dist/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        $.ajax({
            type: "get",
            url: "http://localhost:3000/index",
            success: function (data) {
                console.log(data);
                if(data.linkid==8){
                    alert("欢迎您,"+data.username);
                }else if(data.linkid==9){
                    alert("不好意思当前页面仅对会员开放请您登录后访问");
                    location.href="login.html";
                }
            }
        });
    })
</script>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值