1.路由层
const router = require('./router')
// 监听路由并下派到router中
app.use('/', router)
const userRouter = require('./user')
//监听到前缀为/user的路由,下派到userRouter中
router.use('/user', userRouter)
//编写最终路由层代码
router.post('/login',
[
body('username').isString().withMessage('username类型不正确'),
body('password').isNumeric().withMessage('password类型不正确')
],//验证账号密码
function (req, res, next) {
const err = validationResult(req)
// 判断err不为空,则抛出验证错误
if (!err.isEmpty()) {
const [{ msg }] = err.errors
next(boom.badRequest(msg))
} else {
const username = req.body.username
const password = md5(`${req.body.password}${PWD_SALT}`)//MD5加密
console.log(password)
//执行service层login方法查询用户密码是否存在,存在则获取token返回登录成功
login(username, password).then(user => {
if (!user || user.length === 0) {
new Result('登录失败').fail(res)
} else {
const token = jwt.sign(
{ username },
PRIVATE_KEY,
{ expiresIn: JWT_EXPIRED }
)
new Result({ token }, '登录成功').success(res)
}
})
}
})
2.service层
//通过用户名密码编写sql查询语句
function login(username, password) {
const sql = `select * from admin_user where username='${username}' and password='${password}'`
return querySql(sql)
}
3.dao层
//通过sql查询语句链接数据库执行查询操作,并将结果返回
function querySql(sql) {
const conn = connect()
debug && console.log(sql)
return new Promise((resolve, reject) => {
try {
conn.query(sql, (err, results) => {
if (err) {
debug && console.log('查询失败,原因:' + JSON.stringify(err))
reject(err)
} else {
debug && console.log('查询成功', JSON.stringify(results))
resolve(results)
}
})
} catch (e) {
reject(e)
} finally {
// 调用完后释放链接,不释放会造成内存泄漏
conn.end()
}
})
}