http://www.myfreax.com/koa-404-500-customize-page/
Koa由Express团队打造的下一代,更小、更健壮、更富有表现力的 Web 框架,通过组合不同的 generator,可以写同步式的代码,异步式的执行,使得代码更加扁平化,简洁,易于阅读,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库
在Koa中status的状态码,默认是404,如果status在整个Request/Response周期没有发生变化,那么就意味这个Request就是404,如果在Request/Response周期内改变status,那么status就是200,当然我们不需要显式的改变status,在下面的一写情况中koa就会去更改状态码
this.render('index',{});
this.send();
this.body='';
因此只需要在koa的处理Response之后,发送到浏览器之前的中间件中判断status是否404即可,处理koa自定义404页面
//first 中间件
app.use(function*(next){
yield next;
if(parseInt(this.status) === 404){
this.body = '404';
}
})
那么在处理500时候,可以使用try/catch来捕获每个中间件的异常,就可以处理500的错误
app.use(function*(next) {
try {
yield* next;
} catch (e) {
this.status = 500;
this.body = '500';
}
if(parseInt(this.status) === 404){
this.body = '404';
}
});
测试404很简单,只需要填写一个不存在路由的URI即可,下面测试500情况
const router = require('koa-router')();
app
.use(router.routes())
.use(router.allowedMethods());
router.get('/', function *(next) {
throw new Error('500');
});