路由(Router)

发布时间:

这里只列出 CmsWing 特有的,更详细的内容请阅读 Egg.js 文档 路由(Router)

Router 主要用来描述请求 URL 和具体承担执行动作的 Controller 的对应关系, 框架约定了 app/router.js 文件用于统一所有路由规则。通过统一的配置,我们可以避免路由规则逻辑散落在多个地方,从而出现未知的冲突,集中在一起我们可以更方便的来查看全局的路由规则。CmsWing 后台继承了路由管理,无需在 router.js里手动配置。

路由管理

分类

路由的归类,比如 我们系统分为,前台,后台,分类下面的路由会继承 分类的 中间件。如果该分类下的某个路由不行继承可以在路由内排除。

  • 中间件:可以选择该分类下路由所继承的中间件。

添加页面

页面是指系统后台的页面,是用 amis 构建,目前只在 【后台】有用。

  • 权限:如果该页面是公共页面不需要权限验证,可以选择【不添加权限节点】
  • 页面URL: 如 /cms/doc,如果是目录可以不填。
  • 菜单:如果选中,会在菜单内展示。
  • 页面地址:内部页面 如:get:/pages/cms/doc.json,存放在 app/pages 目录下,外部地址 如 https://www.cmswing.com 会直接跳转这个地址,如果是目录没有地址,可以不填。

添加路由

  • 权限:如果该页面是公共页面不需要权限验证,可以选择【不添加权限节点】
  • 页面URL: 如 /cms/doc。
  • 菜单:如果选中,会在菜单内展示。
  • 控制器:先创建控制器,可以在这里选择
  • 方法:创建的控制器内的方法,可以在这里选择
  • 上面 URL(/form),控制器(app.controller.form),方法(post) 同等于 app.router.post('/form', app.controller.form.post);
  • 中间件:会继承 分类 的 中间件,如果有单独的中间件,可以在这里选择
  • 排除中间件:默认会继承分类中的中间件,如果不想继承可以在这里选择排除

中间件

通常后台需要登录后才能访问,那么我们可以通过中间件来实现,比如我们编写一个 authAdminToken.js 中间件来验证用户登录,放置在 app/middleware/sys 目录下

// app/middleware/sys/authAdminToken.js
module.exports = options => {
  return async function authAdminToken(ctx, next) {
    // 支持 options.exclude
    if (options && ctx.helper._.find(options.exclude, o => ctx.url.indexOf(o) !== -1)) return await next();
    const token = ctx.session.adminToken || ctx.get('token');
    const userInfo = ctx.helper.deToken(token);
    if (userInfo) {
      ctx.userInfo = userInfo;
      await next();
    } else {
      if (ctx.request.accepts([ 'json', 'html' ]) === 'html') {
        ctx.session.adminToken = null;
        ctx.redirect('/admin/login');
      } else {
        ctx.body = {
          status: 401,
          msg: '未登录',
          data: { isLogin: false },
        };
      }
    }

  };
};

 

创建完成后就可以在分类里面选择这个中间件

排除中间件

如果在后台分类有些路由不需要登录验证,比如登录路由不需要登录后才可以访问,那么我们在添加路由的时候可以选择排除这个中间件

最后更新时间: 2022-12-06 15:00:00

评论