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

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

ctx.success

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

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

前端返回结果如下:

  1. 1{
  2. 2 "code": 0,
  3. 3 "message": "成功",
  4. 4 "data": "done"
  5. 5}

ctx.successMore

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

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

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

前端返回结果如下:

  1. 1{
  2. 2 "code": 0,
  3. 3 "message": "成功",
  4. 4 "data": {
  5. 5 "list": [
  6. 6 {
  7. 7 "id": 1,
  8. 8 "name": "name1"
  9. 9 },
  10. 10 {
  11. 11 "id": 2,
  12. 12 "name": "name2"
  13. 13 }
  14. 14 ],
  15. 15 "index": 2,
  16. 16 "finished": true
  17. 17 }
  18. 18}
名称 说明
data.list 返回的列表数据
data.index 列表偏移量,用于读取下一页数据
data.finished 标识列表数据是否已经读取完毕,如果读取完毕就不再读取下一页数据

ctx.fail

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

声明错误代码

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

src/suite-vendor/test-party/modules/test-party/backend/src/config/errors.js

  1. 1// error code should start from 1001
  2. 2module.exports = {
  3. 3 1001: 'Error Test',
  4. 4};

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

src/suite-vendor/test-party/modules/test-party/backend/src/config/locale/zh-cn.js

  1. 1module.exports = {
  2. 2 'Error Test': '错误测试',
  3. 3};

返回错误信息

本模块内部使用

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

  1. 1this.ctx.fail(1001);

跨模块使用

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

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

前端返回结果

  1. 1{
  2. 2 "code": 1001,
  3. 3 "message": "错误测试"
  4. 4}

ctx.throw

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

声明错误代码

ctx.fail

返回错误信息

本模块内部使用

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

  1. 1this.ctx.throw(1001);

跨模块使用

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

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

前端返回结果

  1. 1{
  2. 2 "code": 1001,
  3. 3 "message": "错误测试",
  4. 4 "stack": "Error: 错误测试\n at ErrorClass.throw ...",
  5. 5 "name": "Error",
  6. 6 "status": 500
  7. 7}