返回

Egg.js 初学者指南:从零构建全栈应用

前端

  1. 邂逅 Egg.js:一个前端工程师的福音

1.1 踏上全栈征途,Egg.js 携手同行

作为一名前端软件工程师,你是否渴望涉足服务端开发领域,拓展自己的技能边界,成为一名全栈工程师呢?在这个瞬息万变的数字世界,全栈工程师备受追捧,他们能够独立构建和维护完整的应用程序,包括前端和后端。然而,服务端开发对于许多前端工程师来说可能是一个未知的领域,需要花费大量时间和精力去学习和掌握。

这时,Egg.js 的出现为前端工程师们打开了一扇便捷之门。Egg.js 是一个基于 Node.js 的全栈框架,它将 Node.js 的强大功能与现代前端开发实践相结合,让前端工程师能够快速上手服务端开发,构建出高性能、可扩展的应用程序。Egg.js 采用模块化设计,提供了一系列开箱即用的中间件和工具,大大简化了开发流程,让前端工程师能够专注于业务逻辑的实现,而无需过多地关注底层技术细节。

1.2 Egg.js 的优势:让开发更轻松、更高效

Egg.js 拥有许多优势,使其成为前端工程师学习服务端开发的理想选择:

  • 上手简单: Egg.js 采用简洁明了的语法,学习曲线平缓,即使是前端开发新手也能快速掌握。

  • 模块化设计: Egg.js 采用模块化设计,将应用程序划分为不同的模块,便于管理和维护,也方便团队协作开发。

  • 中间件支持: Egg.js 提供了一系列开箱即用的中间件,涵盖了日志记录、安全、缓存等常用功能,无需开发者手动编写代码,即可实现这些功能。

  • 强大扩展性: Egg.js 具有强大的扩展性,可以通过插件系统轻松扩展其功能,满足不同的开发需求。

  • 活跃社区: Egg.js 拥有一个活跃的社区,提供丰富的文档、教程和技术支持,帮助开发者快速解决问题,提高开发效率。

2. Egg.js 初体验:从入门到进阶

2.1 安装 Egg.js,开启你的开发之旅

要使用 Egg.js,首先需要在你的开发环境中安装它。你可以通过以下命令安装 Egg.js:

npm install -g egg-init

安装完成后,你就可以使用 egg-init 命令创建一个新的 Egg.js 项目。例如,你可以通过以下命令创建一个名为 my-egg-app 的项目:

egg-init my-egg-app

2.2 漫步 Egg.js 项目结构,一览全局

当你创建一个新的 Egg.js 项目时,你将看到以下项目结构:

my-egg-app
├── app
│   ├── controller
│   ├── middleware
│   ├── model
│   ├── public
│   ├── router
│   ├── service
│   └── view
├── config
├── database
├── logs
├── node_modules
├── package.json
└── test
  • app: 这是 Egg.js 项目的核心目录,包含了应用程序的所有代码。

  • config: 此目录包含应用程序的配置信息,例如数据库连接信息、安全配置等。

  • database: 此目录用于存储数据库相关文件,例如迁移脚本、数据模型等。

  • logs: 此目录用于存储应用程序的日志文件。

  • node_modules: 此目录包含了应用程序运行所需的第三方库。

  • package.json: 此文件包含应用程序的元数据信息,例如应用程序名称、版本号、依赖项等。

  • test: 此目录用于存储应用程序的测试代码。

2.3 编写你的第一个 Egg.js 控制器

控制器是 Egg.js 中处理请求和响应的类。要在 Egg.js 中编写控制器,你需要在 app/controller 目录下创建一个新的 JavaScript 文件。例如,你可以创建一个名为 HomeController.js 的控制器文件,内容如下:

// app/controller/HomeController.js
'use strict';

const Controller = require('egg').Controller;

class HomeController extends Controller {
  async index() {
    this.ctx.body = 'Hello, Egg.js!';
  }
}

module.exports = HomeController;

在上面的代码中,HomeController 继承自 Controller 类,并且定义了 index 方法来处理根路径 / 的请求。当用户访问应用程序的根路径时,index 方法将被调用,并且会将 "Hello, Egg.js!" 作为响应正文返回给用户。

2.4 开启开发模式,实时见证变化

在 Egg.js 项目中,你可以通过以下命令启动开发模式:

npm start

开发模式下,Egg.js 将会监听文件系统中的变化,并在文件发生变化时自动重启应用程序。这使得你可以在开发过程中快速地看到代码更改的效果,从而提高开发效率。

3. 深入 Egg.js:掌握进阶技巧

3.1 编写服务层代码,实现业务逻辑

服务层代码是 Egg.js 中用于实现业务逻辑的代码。要在 Egg.js 中编写服务层代码,你需要在 app/service 目录下创建一个新的 JavaScript 文件。例如,你可以创建一个名为 UserService.js 的服务文件,内容如下:

// app/service/UserService.js
'use strict';

const Service = require('egg').Service;

class UserService extends Service {
  async findUserById(id) {
    const user = await this.ctx.model.User.findById(id);
    return user;
  }

  async createUser(user) {
    const result = await this.ctx.model.User.create(user);
    return result;
  }
}

module.exports = UserService;

在上面的代码中,UserService 继承自 Service 类,并且定义了两个方法:findUserByIdcreateUserfindUserById 方法用于根据用户 ID 查询用户信息,createUser 方法用于创建新的用户。

3.2 使用中间件,增强应用程序功能

中间件是 Egg.js 中用于处理请求和响应的函数。中间件可以用于日志记录、安全、缓存等目的。要在 Egg.js 中使用中间件,你需要在 app/middleware 目录下创建一个新的 JavaScript 文件。例如,你可以创建一个名为 logger.js 的中间件文件,内容如下:

// app/middleware/logger.js
'use strict';

module.exports = () => {
  return async function (ctx, next) {
    const start = Date.now();
    await next();
    const ms = Date.now() - start;
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
  };
};

在上面的代码中,我们定义了一个中间件函数,该函数将在每次请求到达时被调用。该中间件函数将记录请求的详细信息,包括请求方法、请求 URL 和请求耗时。

3.3 构建数据模型,存储数据

数据模型是 Egg.js 中用于存储数据的类。要在 Egg.js 中构建数据模型,你需要在 app/model 目录下创建一个新的 JavaScript 文件。例如,你可以创建一个名为 User.js 的数据模型文件,内容如下:

// app/model/User.js
'use strict';

const Sequelize = require('sequelize');

module.exports = app => {
  const User = app.model.define('user', {
    id: {
      type: Sequelize.INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    username: {
      type: Sequelize.STRING(30),
      allowNull: false,
    },
    password: {
      type: Sequelize.STRING(128),
      allowNull: false,
    },
  });
  return User;
};

在上面的代码中,我们定义了一个数据模型 User,该模型包含三个字段:idusernamepasswordid 字段是主键,并且会自动递增。username 字段是一个长度为 30 个字符的字符串,并且不允许为 nullpassword 字段是一个长度为 128