返回

从0到1开发一个小程序 - Part 2

前端

Egg.js入门指南:揭秘Controller、Service和Middleware

导语

在技术飞速发展的时代,小程序已成为企业争相抢占移动互联网市场的一大战略。然而,小程序开发并非易事,尤其对新手而言更是困难重重。本教程将手把手指导新手开发者从零开始开发一个小程序,带你深入了解Egg.js框架的核心概念:Controller、Service和Middleware。

一、Controller:处理路由请求的枢纽

Controller是Egg.js中处理路由请求的类。每个Controller由一个或多个方法组成,每个方法对应一个特定的路由。Controller中的方法可以调用Service和Middleware,以完成具体的业务逻辑。

二、Service:封装业务逻辑的帮手

Service是Egg.js中封装业务逻辑的类。它通常由一个或多个方法组成,这些方法可以调用Model和Repository来完成特定的业务操作。Service负责将业务逻辑与Controller和Middleware分离,提高代码的可维护性和可重用性。

三、Middleware:请求处理的过滤器

Middleware是Egg.js中用来处理请求和响应的函数。它可以执行验证请求、处理错误、记录日志等操作。Middleware以一个或多个函数的形式实现,可以在请求和响应的各个阶段执行。

四、示例:构建一个简单的计数器小程序

为了加深对Controller、Service和Middleware的理解,我们以一个简单的计数器小程序为例:

代码示例:

// controller/counter.js
module.exports = class CounterController extends Controller {
  async getCount() {
    const count = await this.service.counter.getCount();
    await this.ctx.render('index.html', { count });
  }
};

// service/counter.js
module.exports = class CounterService {
  async getCount() {
    const count = await this.ctx.model.Counter.findOne();
    return count ? count.count : 0;
  }
};

// middleware/logger.js
module.exports = async (ctx, next) => {
  const start = Date.now();
  await next();
  const end = Date.now();
  const duration = end - start;
  console.log(`Request ${ctx.method} ${ctx.url} took ${duration}ms`);
};

应用场景:

该小程序实现了一个计数器功能,Controller负责处理路由请求,Service负责从数据库中获取计数器值,Middleware负责记录请求的执行时间。

五、结语:核心概念的融会贯通

Controller、Service和Middleware是Egg.js框架中必不可少的核心概念,掌握它们对于开发高效、可维护的小程序至关重要。通过理解这些概念并灵活运用,开发者可以构建出功能强大、代码整洁的小程序。

六、常见问题解答

  1. Controller和Service有什么区别?
    Controller负责处理路由请求,Service负责封装业务逻辑。
  2. Middleware的用途是什么?
    Middleware可以在请求和响应的各个阶段执行,用来处理验证请求、处理错误、记录日志等操作。
  3. 如何使用Middleware?
    在config/middleware.js文件中配置需要使用的Middleware。
  4. Egg.js中是否可以自定义Controller、Service和Middleware?
    是的,可以通过创建自定义的类来实现。
  5. Controller、Service和Middleware之间如何交互?
    Controller调用Service和Middleware,Service调用Model和Repository。