API路由

2018-11-22 14:00:17

API路由清单

EggJS将所有的API路由放入一个统一的清单中,EggBorn自动将模块的API路由清单合并到EggJS统一的清单中

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

const test = require('./controller/test.js');

module.exports = app => {
  const routes = [
    ...
    // test
    { method: 'post', path: 'test/echo', controller: test, action: 'echo', middlewares: 'transaction,middlewareDemo',
      meta: {
        right: {
          type: 'function',
          name: 'testEcho',
        },
      },
    },
  ];
  return routes;
};
名称 说明
method get/post等方法
path 路径
controller Controller对象
action Controller方法,如果不设置,则自动采用path尾部单词
middlewares 可指定一组中间件,如transaction是启用数据库事务
meta API路由的元数据,可以指定与中间件相关的参数

前端访问API路由

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

场景 格式 举例
本模块内部调用 controller/action test/echo
跨模块调用 /providerId/moduleName/controller/action /test/todo/test/echo

本模块内部调用

const body = {};
this.$api.post('test/echo', body).then(data => {
  console.log(data);
}).catch(err => {
  console.log(err);
});

跨模块调用

const body = {};
this.$api.post('/test/todo/test/echo', 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/todo/test/echo',
  body,
});
名称 说明
ctx.performAction 通过此方法在后端调用API路由
method get/post等方法
url API路由路径
body post方法的传入参数


评论: