您的位置:首页 > Web前端 > Node.js

【知识整理】Node.js-Koa之错误处理

2017-11-29 16:08 591 查看
一。错误处理

1.500错误:如代码运行过程发生错误,我们需要把错误信息返回给用户。HTTP协议规定这时要返回500状态吗,koa提供了ctx.throw()方法,用来抛出错误。

const main = ctx =>{
ctx.throw(500);
}2.404错误:如将ctx.response.status设置成404,相当于ctx.thow(404),返回404错误
const main = ctx =>{
ctx.response.status = 404;
ctx.response.body = 'Page Not Fo..und';
}3.处理错误的中间件:为方便处理错误,最好用try-catch将其捕获,但每个中间件都这么写就很麻烦,可以让最外层的中间件负责所有中间件的错误处理。
const handler = async (ctx, next) =>{
try{
await next();
}catch(e){
ctx.response.status = e.statusCode ||e.status ||500;
}
}
const main = ctx =>{
ctx.throw(500);
}
app.use(handler);
app.use(main);4.error事件监听:运行过程中出错,koa会触发一个error事件。监听该事件,可以处理错误。
const main = ctx =>{
ctx.throw(500);
};
app.on('error', (err, ctx) =>{
console.error(err);
})5.释放error事件:如果错误被try-catch捕获,就不触发error事件,这时必须调用ctx.app.emit(),手动释放error事件,才能让监听函数生效
const handler = async (ctx, next) =>{
try{
await next();
}catch(err){
ctx.respose.status = err.statusCode ||err. status || 500;
ctx.response.type = 'html';
ctx.response.body = '<p>出错啦</p>';
ctx.app.emit('error', err, ctx);
}
}
ctx.main = ctx =>{
ctx.throw(500);
}
app.on('error', function(err){
console.log(err);
})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息