API路由清单

EggBornJS自动将模块的API路由清单合并到底层EggJS统一的清单中

src/suite-vendor/test-party/modules/test-party/backend/src/routes.js

  1. 1module.exports = app => {
  2. 2 const routes = [
  3. 3 {
  4. 4 method: 'post',
  5. 5 path: 'kitchen-sink/guide/echo9',
  6. 6 controller: 'testKitchensinkGuide',
  7. 7 action: 'echo9',
  8. 8 middlewares: 'test,transaction',
  9. 9 meta: {
  10. 10 right: { type: 'resource', name: 'appComponentsGuide' },
  11. 11 },
  12. 12 },
  13. 13 ];
  14. 14 return routes;
  15. 15};
名称 说明
method get/post等方法
path 路径,支持EggJS的参数化路径
controller Controller对象
action Controller方法,如果不设置,则自动采用path尾部单词
middlewares 可指定一组中间件,如transaction是启用数据库事务
meta API路由的元数据,可以指定与中间件相关的参数,如配置全局中间件right的参数:type和name,从而验证当前用户是否具有访问此API的权限

前端访问API路由

前端访问后端API路由主要有两个场景:本模块内部调用跨模块调用

场景 格式 举例
本模块内部调用 controller/action kitchen-sink/guide/echo9
跨模块调用 /providerId/moduleName/controller/action /test/party/kitchen-sink/guide/echo9

本模块内部调用

  1. 1const body = {};
  2. 2this.$api.post('kitchen-sink/guide/echo9', body).then(data => {
  3. 3 console.log(data);
  4. 4}).catch(err => {
  5. 5 console.log(err);
  6. 6});

跨模块调用

  1. 1const body = {};
  2. 2this.$api.post('/test/party/kitchen-sink/guide/echo9', body).then(data => {
  3. 3 console.log(data);
  4. 4}).catch(err => {
  5. 5 console.log(err);
  6. 6});

后端访问API路由

不仅前端可以访问API路由,后端也可以访问API路由

后端访问API路由也支持两个场景:本模块内部调用跨模块调用

这里,以跨模块调用为例:

  1. 1const body = {};
  2. 2const data = await this.ctx.performAction({
  3. 3 method: 'post',
  4. 4 url: '/test/party/kitchen-sink/guide/echo9',
  5. 5 body,
  6. 6});

ctx.performAction

在后端调用API路由

名称 说明
method get/post等方法
url API路由路径
body post方法的传入参数