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

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

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

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

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

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

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

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

你可能感兴趣的:(javascript,node,koa)