1-services文件夹下的登录业务逻辑
const { querySql, queryOne } = require('../utils/index');
const md5 = require('../utils/md5');
const jwt = require('jsonwebtoken');
const boom = require('boom');
const { body, validationResult } = require('express-validator');
const {
CODE_ERROR,
CODE_SUCCESS,
PRIVATE_KEY,
JWT_EXPIRED,
USER_MESSAGE
} = require('../utils/constant');
const { decode } = require('../utils/user-jwt');
var myData = new Date()
const currentYear = myData.getFullYear()
const currentMonth = myData.getMonth() + 1
const currentTime = myData.toLocaleString('chinese',{hour12:false})
function login(req, res, next) {
addInitData();
const err = validationResult(req);
if (!err.isEmpty()) {
const [{ msg }] = err.errors;
next(boom.badRequest(msg));
} else {
let { username, password } = req.body;
const query = `select * from user where username='${username}' and password='${password}'`;
querySql(query)
.then(user => {
// console.log('用户登录===', user);
if (!user || user.length === 0) {
res.json({
code: CODE_ERROR,
msg: '用户名或密码错误',
data: null
})
} else {
const token = jwt.sign(
// payload:签发的 token 里面要包含的一些数据。
{ username },
// 私钥
PRIVATE_KEY,
// 设置过期时间
{ expiresIn: JWT_EXPIRED }
)
let userData = {
id: user[0].id,
username: user[0].username,
userChinese: user[0].userChinese,
};
res.json({
code: CODE_SUCCESS,
msg: '登录成功',
data: {
token,
userData
}
})
}
})
}
}
module.exports = {
login
}
这里导入了md5对用户密码加密,jwt签发token,jwt解密详情可以查看知识点(2)。还引入来了boom对错误信息统一处理,validator对请求信息验证。这里使用res.json。
2-登录函数中调用了addInitData()方法。初始化信息。操作数据库,插入数据。
function addInitData() {
let query = `select id, month, year, username from filltotal where username='${USER_MESSAGE[0].username}' and year='${currentYear}' and month='${currentMonth}' `
queryOne(query).then((task)=>{
if(!task){
let addQuery;
USER_MESSAGE.forEach((item)=>{
addQuery = `insert into filltotal(username, year, month, department, status, time, userChinese, departChinese) values('${item.username}', '${currentYear}', '${currentMonth}','${item.userMessage.department}', '0', '${currentTime}', '${item.userMessage.userChinese}', '${item.userMessage.departChinese}')`;
querySql(addQuery).then(()=>{})
})
}
})
}
后续会对操作数据库方法统一说明