提取通用模型

  1. 全局通用模型放到 app.locals ,通常在 app.js 中设置,会合并到局部模型中

  2. 上下文通用模型放到 ctx.locals 中,通常在中间件中设置

  3. 局部模型一般在具体的 action 中设置

部分代码

  1. app.js

    // egg 创建好了 app 之后,如果存在此文件,并且是一个方法,则其会自动运行该方法一次
    module.exports = (app) => {
      // 全局通用模型
      app.locals = {
        globalTitle: "地区数据库",
      };
      
      app.axios = require("axios").default;
    };
    
  2. router.js

    module.exports = (app) => {
      const { router } = app;
      const verifyToken = app.middleware.verifyToken({}, app);
    
      router.get("/", verifyToken, "home.index");
      router.get("/login", "user.login");
      router.post("/login", "user.handleLogin");
    };
    
  3. /middleware/verifyToken.js

    // 鉴权的中间件
    module.exports = (options, app) => {
      return async function (ctx, next) {
        // 你能不能进入首页
        const token = ctx.cookies.get("token");
        if (!token) {
          ctx.redirect("/login");
          return;
        }
        const resp = await app.axios.get(
          `${app.config.$apiBase}/api/user/whoami`,
          {
            headers: {
              authorization: `Bearer ${token}`,
            },
          }
        );
    
        if (resp.data.code) {
          // 登录过期或被篡改
          ctx.redirect("/login");
          return;
        }
    
        // 上下文通用模型
        ctx.locals.user = resp.data.data;
        await next();
      }
    }
    
  4. /controller/home.js

    const Controller = require("egg").Controller;
    
    module.exports = class extends Controller {
      async index() {
        const resp = await this.app.axios.get(`${this.config.$apiBase}/api/local`);
        // 局部模型
        var model = {
          title: "首页",
          provinces: resp.data,
        };
        await this.ctx.render("home", model);
      }
    };
    
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 提取通用模型
  2. 2. 部分代码