关于node.js:Node用户登录与注册功能总结

4次阅读

共计 3005 个字符,预计需要花费 8 分钟才能阅读完成。

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

目录

  • 原理剖析
  • 实战案例

原理剖析

用户注册繁难流程图

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

用户登录繁难流程图

实战案例

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: "用户未登录!",}
        })
    }
})

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

正文完
 0