egg学习笔记第十二天:eggjs结合简易项目实现路由分组以及按需加载中间件

1、一个正常项目的思惟导图

大体分为三个部分:javascript

①后台管理系统(须要登陆)java

②网站前台api

③api接口session

如下为路由结合控制器进行模块分组的例子:app

"use strict";

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get("/", controller.home.index);

  // 后台
  router.get("/admin/user", controller.admin.user.index);

  router.get("/admin/article", controller.admin.article.index);
  router.get("/admin/article/add", controller.admin.article.add);
  router.get("/admin/article/edit", controller.admin.article.edit);

  router.get("/admin/product", controller.admin.product.index);
  router.get("/admin/product/add", controller.admin.product.add);
  router.get("/admin/product/edit", controller.admin.product.edit);

  // api
  router.get("/api/user", controller.api.user.index);
  router.get("/api/product", controller.api.product.index);
};

 

2、后管系统登陆前作认证,须要写一个中间件。async

①middleware下新建admin_auth.js,写入以下内容:网站

module.exports = (option, app) => {
  return async function auth(ctx, next) {
    // 若是session存在表示以登陆 继续访问,若是session不存在表示没有登陆,跳转到首页
    if (ctx.session && ctx.session.userInfo) {
      await next();
    } else {
      if (ctx.request.url == "/") {
        await next();
      } else {
        ctx.redirect("/");
      }
    }
  };
};

②配置中间件,使其生效。url

config.middleware = ["adminAuth"];

③中间件配置完成,可是访问全部url都会执行中间件,若是须要按需执行,只想在访问后管的时候执行,则:spa

先注释掉config>config.default.js中的middleware配置,在router.js中引入中间件并局部注册,写在每个理由规则中的第二个参数:code

 

②还有一种方法就是中间件配置match作匹配。

// add your middleware config here
  config.middleware = ["adminAuth"];
  config.adminAuth = {
    match: "/admin"
  };

有'/admin'的路径都会执行adminAuth中间件。到此实现了一个后管类系统最简单地模拟认证效果。

相关文章
相关标签/搜索