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