API路由清单

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

src/module/test-party/backend/src/routes.js

const testKitchensinkGuide = require('./controller/kitchen-sink/guide.js');

module.exports = app => {
  const routes = [
    { 
      method: 'post', 
      path: 'kitchen-sink/guide/echo9', 
      controller: testKitchensinkGuide,
      action: 'echo9',
      middlewares: 'test,transaction'
      meta: {
        right: {
          type: 'function',
          name: 'kitchenSink',
        },
      },
    },
  ];
  return routes;
};
名称 说明
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

本模块内部调用

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

跨模块调用

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

后端访问API路由

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

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

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

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

ctx.performAction

在后端调用API路由

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

ctx.performActionInBackground

在后端以后台方式调用API路由

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

具体应用场景,可参见:CabloyJS:进度条