错误处理-被全局错误处理捕获,却没有被组件错误处理捕获

错误处理-被全局错误处理捕获,却没有被组件错误处理捕获

当用户名输入错误的时候,直接进入了全局错误处理环节errorHandle,而没有进入组件中的catch(),不知怎么处理

const errorHandle = (ctx, next) => {
  return next().catch((err) => {
    if (401 == err.status) {
      ctx.status = 401;
      ctx.body = {
        code:401,
        msg:'Protected resource, use Authorization header to get access\n'
      }
    } else {
    //    进入了这里
      console.log('errorapp');
      ctx.status = err.status || 500
      ctx.body = {
        code:500,
        msg:err.message
      }
    }
  })
}



//组件中方法
async submit(){
      const isValid = await this.$refs.observer.validate()
      if(!isValid){
        return
      }
      login({
        username: this.name,
        password: this.password,
        code: this.code,
        sid: this.$store.state.sid
      }).then(r => {
         if(r.code == 200){
           console.log(r);
         }
      }).catch(err => {
          //没有被这里捕获
          console.log('err',err);
      })
    }


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你问题解决了吗?  我当初的问题是, 在请求响应拦截器给了,

errorHandle(err),  这个函数什么也没做。 我的问题是因为这句,它走了这个错误,所以没有进入到catch, 你把这个注释掉就可以了。  // errorHandle(err)。

以下这样写,会报 typeError

const errorHandle = (err) => {

  // console.log(err)

}

export default errorHandle


  • 盏中柳色浅 提问者 #1
    解决了。感谢同学关注
    2020-05-24 20:42:37
Brian 2020-04-11 23:03:52

当用户名输入错的时候,你看看mongo那边查询 是不是出错了,导致ctx.throw了。

检查一下后台接口那边,有没有报错。

或者主动ctx.throw(500)看看,就会进入到catch后面了。

  • 提问者 盏中柳色浅 #1
    老师,有点不明白您的意思。 怎么看mongo的查询,是不是看mongoose的model返回什么?如果用户名错误返回的是null. 另外我知道为啥没有进入组件的catch里面了,因为在API返回500的时候,进入的也是then.但是then这里的response返回的是Error:Request failed这样一串内容,这样的话应该是在catch()中返回啊,为何是在then()中返回? //组件中方法 async submit(){ const isValid = await this.$refs.observer.validate() if(!isValid){ return } login({ username: this.name, password: this.password, code: this.code, sid: this.$store.state.sid }).then(r => { //这里的r返回的是下面这串: //Error: Request failed with status code 500 at createError (createError.js?2d83:16) at settle (settle.js?467f:17) at XMLHttpRequest.handleLoad (xhr.js?b50d:61) if(r.code == 200){ console.log(r); } }).catch(err => { //在API返回500的情况下仍然没有进入catch console.log('err',err); }) }
    2020-04-12 16:08:30
  • Brian 回复 提问者 盏中柳色浅 #2
    有两点你要清楚,课程中定义code是一个可以根据自己的业务需求来随意定的!第二点,then这里有返回,说明ctx.body正常的响应了,你可以在登陆接口打个短点调试
    2020-04-12 16:18:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师