三层架构 + MVC

在 egg 中使用数据库

egg 支持多种方式操作数据库:

部分代码

  1. /config/config.default.js

    exports.keys = "ricepudding.cn";
    
    exports.view = {
      // 该配置会被 egg-view 读取
      mapping: {
        // 映射配置,将不同的模板后缀映射到对应的模板引擎处理
        ".ejs": "ejs",
      },
      defaultViewEngine: "ejs", //如果映射找不到对应的模板引擎,将使用该值作为默认使用的模板引擎
      defaultExtension: ".ejs", //后续在controller中渲染模板时,默认渲染的模板后缀名
    };
    
    // 安全配置
    exports.security = {
      csrf: {
        enable: false,
      },
    };
    
    // 配置redis
    exports.redis = {
      client: {
        port: 6379, // Redis port
        host: "127.0.0.1", // Redis host
        password: "",
        db: 0,
      },
    };
    
    exports.$apiBase = "http://study.yuanjin.tech";
    
  2. /config/plugin.js

    exports.ejs = {
      enable: true,
      package: "egg-view-ejs",
    };
    
    exports.redis = {
      enable: true,
      package: "egg-redis",
    };
    
  3. /service/local.js

    const Service = require("egg").Service;
    
    module.exports = class extends Service {
      async getProvinces() {
        const key = "province";
        const provinces = await this.app.redis.get(key);
        if (provinces) {
          console.log("使用了缓存");
          return JSON.parse(provinces);
        }
        
        const resp = await this.app.axios.get(`${this.config.$apiBase}/api/local`);
        //缓存
        this.app.redis.set(key, JSON.stringify(resp.data));
        return resp.data;
      }
    };
    
  4. /controller/home.js

    const Controller = require("egg").Controller;
    
    module.exports = class extends Controller {
      async index() {
        const provinces = await this.service.local.getProvinces();
        var model = {
          title: "首页",
          provinces
        };
        await this.ctx.render("home", model);
      }
    };
    
  5. /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");
    };
    
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

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

粽子

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

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

了解更多

目录

  1. 1. 三层架构 + MVC
  2. 2. 在 egg 中使用数据库
  3. 3. 部分代码