express-async-errors全局异常捕获

在未使用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)
  }
})

    这样就中了!!!!        

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值