在未使用express-async-errors之前,只能在每个街口中使用try catch来捕获出现的异常,用起来非常的繁琐,类似于这样
try {
let sql = `select u.status from pall_users u where u.user_account = ` + `'${user_account}'`
// 查询当前用户的角色ID
let roleSql = `SELECT sm.* FROM pall_system_menus sm, pall_system_role_menus srm WHERE sm.id = srm.menu_id AND srm.role_id = (select sru.role_id from pall_system_role_users sru where sru.user_id = ${model.user_id})`
// 当前用户所拥有的菜单列表
const user = await sequelize.query(sql, { type: sequelize.QueryTypes.SELECT })
if (user[0].status === 1) {
return resJson(req, res, 5500, null, '用户账号被冻结,请联系管理员', 1)
} else {
const user_info = await PALL_USER.findOne({
attributes: [
'user_id',
"user_account",
"user_name",
"user_avatar",
"user_age",
"user_gender",
"createdAt",
"status",
"updatedAt"],
where: { user_account }
})
const perission = await sequelize.query(roleSql, { type: sequelize.QueryTypes.SELECT })
req.requestTime = new Date() - start
// 对token加密处理 登录成功
let jwt = new jwtUtil(model.user_id)
// 生成token
let token = jwt.generateToken()
// await PALL_USER.create({user_account,password,user_id:user_account})
return resJson(req, res, 5200, { jwt: token, user_info, perission }, '登录成功!', 1)
}
} catch (error) {
const {message} = error
return resJson(req, res, 5500, null, message, 3)
}
})
所以在启动文件中引入express-async-errors,就可以节省很多代码,但是可以达到同样的效果
npm i express-async-errors
在引入express之后引入该组件,具体是这样:
var express = require('express')
require('express-async-errors')
var app = express()
注意:需要在路由之后使用app.use((err,req,res,next)=>{})
app.use(router)
app.use(function (err, req, res, next) {
if (err) {
const { message } = err
return resJson(req, res, 5500, null, message, 3)
}
})
这样就中了!!!!