koa学习之错误处理

错误处理

  • 运行时错误, 返回500
  • 逻辑错误, 如找不到(404)、先决条件失败(412)。。。

为什么使用错误处理

  • 防止程序挂掉
  • 告诉用户错误信息
  • 便于开发者调试

了解Koa 自带的错误处理

  • 制造404、412、500三种错误
    • 404 请求一个没有地址,koa会返回Not Found
    • 412 先决条件失败, 需要手动ctx.throw(412)
    • 500 代码写错。返回Internal Server Er
  • 了解Koa自带的错误处理做了什么

自己编写错误处理中间件

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

 // 先决条件错误
 // ctx.throw(412);
-->
{
    "msg": "Precondition Failed"
}

 // 服务器代码错误
 // a.b.c
 -->
 {
    "msg": "a is not defined"
}

// 404错误是不能捕获的

使用Koa-json-error 中间件处理错误

  • 生产环境和开发环境配置
const jsonError = require('koa-json-error');

// 中间件处理错误
app.use(jsonError({
    postFormat(e, {stack, ...rest}) {
        return process.env.NODE_ENV === 'production' ? rest : {stack, ...rest}
    }
}));

使用koa-parameter参数校验

const parameter = require('koa-parameter');
// 校验参数
app.use(parameter(app));

....

create(ctx) {
    let user = ctx.request.body;
    ctx.verifyParams({
        name: {type: 'string', required: true},
        age: {type: 'number', required: false}
    });
    db.push(user);
    ctx.body = user;
}
发布了78 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44520133/article/details/95012018