Error

2018-11-23 11:53:01

EggBorn对后端API路由的返回结果进行了统一规范,对ctx对象注入了以下方法:

名称 说明
ctx.success 返回成功数据
ctx.successMore 返回成功数据,支持列表分页
ctx.fail 返回错误信息
ctx.throw 抛出异常

ctx.success

向前端返回成功数据,一般在Controller中调用

const res = 'done';
this.ctx.success(res);

前端返回结果如下:

{
  "code": 0,
  "message": "成功",
  "data": "done"
}

ctx.successMore

当向前端返回列表时,传递与分页相关的信息,一般在Controller中调用

比如,需要读取第1页数据,每页10条:

const page = { index: 0, size: 10 };
const items = [
  { id: 1, name: 'name1' },
  { id: 2, name: 'name2' }
];
this.ctx.successMore(items, page.index, page.size);

前端返回结果如下:

{
  "code": 0,
  "message": "成功",
  "data": {
    "list": [
      {
         "id": 1,
         "name": "name1"
      },
      {
         "id": 2,
         "name": "name2"
      }
    ],
    "index": 2,
    "finished": true
  }
}
名称 说明
data.list 返回的列表数据
data.index 列表偏移量,用于读取下一页数据
data.finished 标识列表数据是否已经读取完毕,如果读取完毕就不再读取下一页数据

ctx.fail

向前端返回成功错误信息,一般在Controller中调用

声明错误代码

EggBorn兼容HTTP协议约定的错误代码,如403: Forbidden404: Not Found,此外还可以自定义错误代码及相应的错误信息

src/module/test-todo/backend/src/config/errors.js

// error code should start from 1001
module.exports = {
  1001: 'Element exists',
};

错误信息还支持国际化,只需要添加相应的语言资源即可

src/module/test-todo/backend/src/config/locale/zh-cn.js

module.exports = {
  ...
  'Element exists': '元素已存在',
};

返回错误信息

本模块内部使用

返回本模块内部声明的错误信息如下:

this.ctx.fail(1001);

跨模块使用

返回其他模块声明的错误信息如下:

this.ctx.fail.module('test-todo',1001);

前端返回结果

{
    "code": 1001,
    "message": "元素已存在"
}

ctx.throw

抛出异常,并向前端返回错误信息

声明错误代码

ctx.fail

返回错误信息

本模块内部使用

抛出本模块内部声明的错误信息如下:

this.ctx.throw(1001);

跨模块使用

抛出其他模块声明的错误信息如下:

this.ctx.throw.module('test-todo',1001);

前端返回结果

{
    "code": 1001,
    "message": "元素已存在",
    "stack": "Error: 元素已存在\n    at ErrorClass.throw ...",
    "name": "Error",
    "status": 500
}


评论: