导语:之前做过一个小我的项目,其中波及到用户注册与登录的性能,当初把这个实现过程记录下来,以便日后查看保护。
目录
- 原理剖析
- 实战案例
原理剖析
用户注册繁难流程图
- 输出用户名和明码
- 查看是否存在此用户
- 存在则返回提醒
- 不存在注册胜利
用户登录繁难流程图
实战案例
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: "用户未登录!", } }) }})
这次的总结就写到这里,当然,这只是最根底的注册与登录性能,然而很简单的注册与登录也是在最根底下面进行加工复杂化的,最重要的是造就逻辑思维思考能力。如何实现一个性能,并且一直优化到最佳水平。