导语:之前做过一个小我的项目,其中波及到用户注册与登录的性能,当初把这个实现过程记录下来,以便日后查看保护。

目录

  • 原理剖析
  • 实战案例

原理剖析

用户注册繁难流程图

  • 输出用户名和明码
  • 查看是否存在此用户
  • 存在则返回提醒
  • 不存在注册胜利

用户登录繁难流程图

实战案例

mysql建表

建表的无关办法在这篇《node和mysql的CURD总结》文章曾经说过了,上面间接建一张用户表。

-- 创立数据表mysql> CREATE TABLE `user` (  `id` int(11) NOT NULL COMMENT 'id',  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户名',  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '明码',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立工夫',  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新工夫') ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='用户表';

node编写

依据下面的流程图,开始进行编写程序。

在进行编写之前。先在我的项目中装置一个依赖包,这个能够生成mysql语句。

npm install xqsql

xqsql npm地址

具体应用办法,点击地址有文档介绍。

  • 用户注册
app.post('/reg', async (req, res) => {    let params = req.body;    if (params.name && params.password) {        let getSql = xqsql.get('user', {            type: 'one',            key: 'name',            ids: [params.name],        }, 'default', 'id,name');        let getSqlResult = await db(getSql);        if (getSqlResult.code == 200 &&        getSqlResult.data.list.length == 0) {            let addParams = [                {                    name: params.name,                    password: params.password,                }            ]            let addFields = [                {                    name: '用户名',                    value: 'name',                    isMust: true                },                {                    name: '明码',                    value: 'password',                    isMust: true                },            ]            let addSql = xqsql.add('user', addParams, addFields);            let addSqlResult = await db(addSql);            if (addSqlResult.code == 200) {                return res.json({                    code: 200,                    msg: 'get_succ',                    data: {                        info: "注册胜利!",                    }                });            } else {                return res.json(addSqlResult);            }        } else {            return res.json({                code: 101,                msg: 'get_succ',                data: {                    info: "用户已存在!",                }            })        }    } else {        return res.json({            code: 101,            msg: 'get_succ',            data: {                info: "用户名和明码不能为空!",            }        })    }})
  • 用户登录

登录这部分的用户信息,这里应用session进行保留,你还能够抉择jwt,这次只用session。

装置依赖包;npm install express-session cookie-parser

// 引入const session = require('express-session');const cookieParser = require('cookie-parser');// 配置app.use(cookieParser());app.use(session({  resave: true,  saveUninitialized: false,  secret: 'demo'}))
app.post('/login', async (req, res) => {    let params = req.body;    if (params.name && params.password) {        let getSql = xqsql.get('user', {            type: 'one',            key: 'name',            ids: [params.name],        }, 'default', 'id,name,password');        let getSqlResult = await db(getSql);        if (getSqlResult.code == 200 &&        getSqlResult.data.list.length) {            let userInfo = getSqlResult.data.list[0];            if (params.name == getSqlResult.data.list[0].name &&             params.password == getSqlResult.data.list[0].password) {                let loginInfo = req.session.user;                if (loginInfo && loginInfo.name == params.name) {                    return res.json({                        code: 101,                        msg: 'get_fail',                        data: {                            info: "用户已登录!",                        }                    });                } else {                    let user = {                        name: params.name,                    }                    req.session.user = user;                    return res.json({                        code: 200,                        msg: 'get_succ',                        data: {                            info: "登录胜利!",                        }                    });                }            } else {                return res.json({                    code: 101,                    msg: 'get_fail',                    data: {                        info: "用户名或者明码谬误!",                    }                })            }        } else {            return res.json({                code: 101,                msg: 'get_fail',                data: {                    info: "用户不存在!",                }            })        }    } else {        return res.json({            code: 101,            msg: 'get_succ',            data: {                info: "用户名和明码不能为空!",            }        })    }})
  • 退出登录

这里就很简略了,间接把用户信息改为null即可。

app.post('/logout', (req, res) => {    let user = req.session.user;    if (user && user.name != '') {        req.session.user = null;        return res.json({            code: 200,            msg: 'get_succ',            data: {                info: "退出登录胜利!",            }        });    } else {        return res.json({            code: 101,            msg: 'get_fail',            data: {                info: "用户未登录!",            }        })    }})

这次的总结就写到这里,当然,这只是最根底的注册与登录性能,然而很简单的注册与登录也是在最根底下面进行加工复杂化的,最重要的是造就逻辑思维思考能力。如何实现一个性能,并且一直优化到最佳水平。