为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第14天 《Node.js+Koa2+MySQL 打造前后端分离精品项目》

课程名称:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

课程章节:第4章【深入浅出讲异常】异步异常与全局异常处理

视频:4-4 全局异常处理中间件编写

            4-5 已知错误和未知错误

课程讲师: 七月


课程内容:

async function func2() {
    try {
        await func3()  //这里的await,是把Promise里边的异常释放出来。可以理解为await  throw出了异常。
        //如果删掉这里的await,则可能会出现“Unhandled promise”,这说明了func3中产生了异常,
        //外部却没有处理这个异常,加上await,会解决这个问题。
    } catch (error) {
        console.log('error')
    }
}
function func3() {
    // return await setTimeout(function(){
    //  throw new Error('error')
    // }, 1000);
    return new Promise((resolve, reject) => {
        setTimeout(function(){
            const r = Math.random()
            if (r < 0.5) {
                reject('error')
            }
        }, 1000)
    })
}

async await是最简单的处理异常的方案。 也存在其他的方案。取到promise后用Promise cathc也可以。


4-5 已知错误和未知错误

程序中捕捉到的error 不应该直接返回到客户端。error中还有堆栈调用的信息,应该把error简化,返回清晰明了的信息给前端。这个原则不仅仅适用于Koa,其他API 编程也要符合这个原则。

要指定一个http的状态码(HTTP Status Code )

需要一个message(文字信息)

可以设置一个error_code(开发者自己定义)


错误的分类:

    已知型错误

        举例;用户传的参数不符合校验规则

    未知型错误

        举例:程序潜在的错误,无意识,根本就不知道他出错,比如 账号密码错误




要做两件事情

1、全局监听到异常

2、输出有意义的信息

//改造之后的代码
const Koa = require('koa')  //导入Koa
const parser = require('koa-bodyparser')
const InitManager = require('./core/init')
const catchErrof = require('./middlewares/exception')

const app = new Koa()
app.use(catchErrof)
app.use(parser())
InitManager.initCore(app)

app.listen(3000)
//改造之后的代码
const catchErrof = async (ctx, next) => {
    try {
        await next()
    } catch (error) {
        ctx.body = '服务器有点问题。'
    }
}
module.exports = catchErrof

post调用 http://localhost:3000/v1/4/classic/latest?param=banana之后

返回的结果是:“服务器有点问题。”

全局异常处理,应用到了编程中一个重要的思想:“AOP”面向切面编程。



课程收获:

这节课知道了async await是最简单的处理异常的方案。 也存在其他的方案。之后其七月老师引出了“全局异常处理”。之后七月老师用基本的示例讲清楚了全局异常处理。


七月老师非常注重在讲编程知识的同时,讲编程思维,讲知识和知识之间的关系。编程是实践性非常强的工作,学习知识最好的方法是放到项目中。做项目的目的不是做项目,最终要做出来自己的项目,业务承载的是编程知识。明天继续刷后边的课程。

https://img1.sycdn.imooc.com//6367a52f00011a3911400635.jpg

https://img1.sycdn.imooc.com//6367ae310001fdf211410645.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消