zoukankan      html  css  js  c++  java
  • node js实战:带数据库,加密的注册登录表单

    demo

    注册效果:

    登陆效果:

          

    数据库截图:

    数据库操作

    db.js

    //这个模块里面封装了所有对数据库的常用操作
    var MongoClient = require('mongodb').MongoClient;
    var settings = require("../settings.js");
    //不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库
    //封装成为内部函数
    function _connectDB(callback) {
        var url = settings.dburl;   //从settings文件中,都数据库地址
        //连接数据库
        MongoClient.connect(url, function (err, db) {
            if (err) {
                callback(err, null);
                return;
            }
            callback(err, db);
        });
    }
    
    //插入数据
    exports.insertOne = function (collectionName, json, callback) {
        _connectDB(function (err, db) {
            db.collection(collectionName).insertOne(json, function (err, result) {
                callback(err, result);
                db.close(); //关闭数据库
            })
        })
    };
    
    //查找数据,找到所有数据。args是个对象{"pageamount":10,"page":10}
    exports.find = function (collectionName, json, C, D) {
        var result = [];    //结果数组
        if (arguments.length == 3) {
            //那么参数C就是callback,参数D没有传。
            var callback = C;
            var skipnumber = 0;
            //数目限制
            var limit = 0;
        } else if (arguments.length == 4) {
            var callback = D;
            var args = C;
            //应该省略的条数
            var skipnumber = args.pageamount * args.page || 0;
            //数目限制
            var limit = args.pageamount || 0;
            //排序方式
            var sort = args.sort || {};
        } else {
            throw new Error("find函数的参数个数,必须是3个,或者4个。");
            return;
        }
    
        //连接数据库,连接之后查找所有
        _connectDB(function (err, db) {
            var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit).sort(sort);
            cursor.each(function (err, doc) {
                if (err) {
                    callback(err, null);
                    db.close(); //关闭数据库
                    return;
                }
                if (doc != null) {
                    result.push(doc);   //放入结果数组
                } else {
                    //遍历结束,没有更多的文档了
                    callback(null, result);
                    db.close(); //关闭数据库
                }
            });
        });
    }
    
    //删除
    exports.deleteMany = function (collectionName, json, callback) {
        _connectDB(function (err, db) {
            //删除
            db.collection(collectionName).deleteMany(
                json,
                function (err, results) {
                    callback(err, results);
                    db.close(); //关闭数据库
                }
            );
        });
    }
    
    //修改
    exports.updateMany = function (collectionName, json1, json2, callback) {
        _connectDB(function (err, db) {
            db.collection(collectionName).updateMany(
                json1,
                json2,
                function (err, results) {
                    callback(err, results);
                    db.close();
                });
        })
    }
    
    exports.getAllCount = function (collectionName,callback) {
        _connectDB(function (err, db) {
            db.collection(collectionName).count({}).then(function(count) {
                callback(count);
                db.close();
            });
        })
    }
    

      密码加密:

    var crypto = require("crypto");
    module.exports = function(mingma){
        var md5 = crypto.createHash('md5');
        var password = md5.update(mingma).digest('base64');
        return password;
    }

    模板:

    login.ejs

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <h1>请登录</h1>
        <div>
            <form action="" method="post">
                <p>
                    登录名: <input type="text" id="dengluming"/>
                </p>
                <p>
                    密码: <input type="password" id="mima"/>
                </p>
                <p>
                    <input id="denglu" type="button" value="登陆"/>
                </p>
            </form>
        </div>
    
        <script type="text/javascript" src="/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">
            //用ajax提交表单
            $("#denglu").click(function(){
                $.post("/dologin",{
                    "dengluming" : $("#dengluming").val(),
                    "mima" : $("#mima").val()
                },function(result){
                    if(result == "1"){
                        alert("登陆成功");
                    }else if(result == "-2"){
                        alert("没有这个注册用户");
                    }else if(result == "-1"){
                        alert("密码不正确");
                    }
                })
            });
        </script>
    </body>
    </html>

    regist.ejs

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <div>
            <p>
                登录名: <input type="text" name="dengluming" id="dengluming"/>
            </p>
            <p>
                密码: <input type="password" name="mima" id="mima"/>
            </p>
            <p>
                <input id="zhuce" type="button" value="注册"/>
            </p>
        </div>
    
        <script type="text/javascript" src="/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">
            //用ajax提交表单
            $("#zhuce").click(function(){
                $.get("/doregist",{
                    "dengluming" : $("#dengluming").val(),
                    "mima" : $("#mima").val()
                },function(result){
                    if(result == "1"){
                        alert("注册成功");
                    }else{
                        alert("注册失败");
                    }
                })
            });
        </script>
    </body>
    </html>
    

      登陆注册:

    var express = require("express");
    var app = express();
    var formidable = require('formidable');
    var db = require("./model/db.js");
    
    var md5 = require("./model/md5.js");
    
    app.set("view engine","ejs");
    
    app.use(express.static("./public"));
    
    //注册页面
    app.get("/regist",function(res,res,next){
        res.render("regist");
    });
    
    //登陆页面
    app.get("/login",function(res,res,next){
        res.render("login");
    });
    
    //执行注册
    app.get("/doregist",function(req,res,next){
        var dengluming = req.query.dengluming;
        var mima = req.query.mima;
        //加密
        mima = md5(md5(mima).substr(4,7) + md5(mima));
    
        //把用户名和密码存入数据库
        db.insertOne("users",{
            "dengluming" : dengluming,
            "mima" : mima
        },function(err,result){
            if(err){
                res.send("-1");
                return;
            }
            res.send("1");
        })
    });
    
    app.post("/dologin",function(req,res,next){
        var form = new formidable.IncomingForm();
    
        form.parse(req, function(err, fields, files) {
            var dengluming = fields.dengluming;
            var mima = fields.mima;
            mima = md5(md5(mima).substr(4,7) + md5(mima));
    
            //检索数据库,按登录名检索数据库,查看密码是否匹配
            db.find("users",{"dengluming":dengluming},function(err,result){
               if(result.length == 0){
                   res.send("-2");  //-2没有这个人
                   return;
               }
                var shujukuzhongdemima = result[0].mima;
                //要对用户这次输入的密码,进行相同的加密操作。然后与
                //数据库中的密码进行比对
                if(mima == shujukuzhongdemima){
                    res.send("1");  //成功
                }else{
                    res.send("-1"); //密码不匹配
                }
            });
        });
    
        return;
    });
    
    app.listen(3000);
    

    数据库地址:

    settings.js

    module.exports = {
    "dburl" : "mongodb://localhost:27017/day7"
    }





  • 相关阅读:
    201871010119-帖佼佼 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
    201871010119 帖佼佼 实验二 个人项目—《背包问题》 项目报告
    201871010119-帖佼佼 实验一 软件工程准备—初识软件工程
    201871010119-帖佼佼《面向对象程序设计(java)》课程学习总结
    201871010119-帖佼佼《面向对象程序设计(java)》第十七周学习总结
    201871010119-帖佼佼《面向对象程序设计(java)》第十六周学习总结
    201871010119-帖佼佼《面向对象程序设计(java)》第十五周学习总结
    201871010119-帖佼佼《面向对象程序设计(java)》第十四周学习总结
    201871010119-帖佼佼《面向对象程序设计(java)》第十三周学习总结
    201871010121-王方 实验四 团队作业1:软件研发团队组建
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/7754855.html
Copyright © 2011-2022 走看看