nodejs之koa2 -- 错误处理

nodejs之koa2 – 错误处理

如果代码运行过程中发生错误,我们需要把错误返回给用户,根据 HTTP 协议约定,这是我们要返回 500 的状态码,表示服务器内部出现错误。

ctx.throw()

koa 提供了 ctx.throw() 方法用来抛出错误,我们可以直接 ctx.throw(500,就是抛出500的错误,类似下面例子

app.use(async (ctx,next) => {
    ctx.throw(500);
});

值得注意的是,如果将 ctx.response.status 设置成对应的状态码,效果跟 ctx.throw() 是一样的,比如设置成 404

app.use(async (ctx,next) => {
    ctx.response.status = 404;
    ctx.response.body = 'Page Not Found';
});

try…catch…

为了更加方便的处理错误,使用 try…catch… 将错误捕获是比较好的,但是每个请求都写感觉太麻烦,其实我们可以定义一个中间件负责对所有的错误进行处理,

app.use(async (ctx,next) => {
    try{
        await next()
    }catch(err){
        ctx.response.status = err.statusCode || err.status || 500;
        ctx.response.body = {
            message: err.message
        };
    }
});

监听 error 事件

其实,koa 还有一个 error 事件监听,如果代码运行发生错误,就会出发这个事件,我们也可以用它来处理错误

app.on('error', (err, ctx) =>
    console.error('server error', err);
);

有一点需要注意的是,如果错误已经被 try…catch 捕获,那么就不会出发 error 事件。这是就必须释放 error 事件,
调用 ctx.app.emit() ,手动释放 error 事件,koa 监听函数才会生效,否则监听事件是不会触发的。

app.use(async (ctx,next) => {
    try{
        await next()
    }catch(err){
        ctx.response.status = err.statusCode || err.status || 500;
        ctx.response.body = {
            message: err.message
        };
        // 手动释放error事件
        ctx.app.emit('error', err, ctx);
    }
});
// 继续触发error事件
app.on('error',() => {
    console.error('server error', err.message);
    console.error(err);
});

debug

开发中用到的最多的就是 debug(开发模式),我们可以通过启动启动脚本配置,在浏览器中也可以对服务端进行 debug。

启动项目时,运行下面的命令

node --inspact app.js

出现下面的字样就是成功了

koa

浏览器访问,打开控制台,出现 node 的小 logo
koa

点击打开 node 调试窗口,愉快的打断点调试吧
koa

启动命令可以修改为 npm run debug,在 package.json 中的 scripts 中添加如下代码就可以了

“debug”: “node --inspect app.js”,

至此,koa 错误处理介绍完毕,可以愉快的写代码了,下一篇,小弟就记录一下koa session和cookie的使用。

本文纯手打,有不当之处请留言!如果对小伙伴们有帮助的话,点赞啊,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值