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的使用。
本文纯手打,有不当之处请留言!如果对小伙伴们有帮助的话,点赞啊,谢谢!