为了账号安全,请及时绑定邮箱和手机立即绑定

Egg.js 项目实战:新手入门教程

概述

本文将详细介绍如何从零开始构建一个Egg.js项目,包括环境搭建、项目创建、基本结构解析和配置文件介绍。此外,还将探讨路由与控制器的使用、模板引擎与视图的集成、数据库连接和ORM操作,以及模块化开发与中间件的使用,帮助你全面掌握Egg.js项目实战。

Egg.js 项目实战:新手入门教程
Egg.js 简介与环境搭建

Egg.js 是什么

Egg.js 是一个基于 Koa 的 Web 应用开发框架。它借鉴了 Express.js 的设计理念,同时也结合了 Koa.js 的优秀特性。Egg.js 主要用于构建 Node.js 的企业级应用,具有丰富的功能和高度的可扩展性。Egg.js 的设计理念是“约定优于配置”,它通过约定自动完成了许多底层配置和初始化工作,使得开发者可以更加专注于业务逻辑的实现。

安装 Node.js 与 NPM

在开始使用 Egg.js 之前,你需要确保已经安装了 Node.js 和 NPM(Node Package Manager)。你可以通过以下步骤安装:

  1. 访问 Node.js 官方网站 并下载最新版本的 Node.js。安装过程中,Node.js 会自动安装 NPM。
  2. 安装完成后,可以通过以下命令检查是否安装成功:
    node -v
    npm -v

    这将打印出你安装的 Node.js 和 NPM 的版本号。

创建第一个 Egg.js 项目

安装完 Node.js 和 NPM 后,你可以使用 Egg.js 的命令行工具 egg-init 来创建一个新的 Egg.js 项目。以下是创建项目的步骤:

  1. 安装 egg-init 工具:
    npm i egg-init -g
  2. 在你的开发目录下使用 egg-init 命令创建一个新的项目:
    egg-init my-egg-app

    这将创建一个名为 my-egg-app 的目录,并在其中初始化一个 Egg.js 项目。

  3. 进入项目目录并安装依赖:
    cd my-egg-app
    npm install
  4. 启动项目:
    npm run dev

    这将启动开发服务器,并监听端口 7001。

在浏览器中访问 http://localhost:7001,你将看到默认的 "Hello world" 页面,这标志着你的 Egg.js 项目已经成功启动。

Egg.js 项目的基本结构

项目目录结构解析

Egg.js 项目的基本目录结构如下:

  • app: 应用的核心模块,包括控制器(controller)、服务(service)、模型(model)、中间件(middleware)等。
  • config: 配置文件目录,用于存放项目的配置文件。
  • public: 静态资源目录,存放 CSS、JavaScript、图片等静态文件。
  • test: 测试用例目录,存放项目的测试代码。
  • app.js: 应用的入口文件。
  • config/config.default.js: 项目的默认配置文件。
  • .npmignore.editorconfig.gitignore 等配置文件。

配置文件介绍

配置文件主要存放在 config 目录中。一些常用的配置文件包括:

  • config/config.default.js: 项目的默认配置文件,你可以在此文件中修改项目的一些默认配置。
  • config/config.{env}.js: 根据不同的环境(如开发、测试、生产)分别配置,如 config/config.development.js

示例代码:

// config/config.default.js
module.exports = appInfo => {
  const config = {};

  // 通用中间件配置
  config.middleware = [];

  // 开发环境配置
  if (appInfo.env === 'development') {
    config.middleware.push('logger');
  }

  return config;
};

// config/config.development.js
module.exports = appInfo => {
  const config = {};

  // 开发环境的特定配置
  config.security = {
    noCache: true,
  };

  return config;
};
路由与控制器

创建路由

Egg.js 使用 router 模块来定义路由。路由定义了 URL 和相应的处理函数之间的映射关系。你可以在 app/router.js 文件中定义路由。

示例代码:

// app/router.js
const Router = require('koa-router');
const router = new Router();

router.get('/', async (ctx, next) => {
  await next();
});

router.get('/user', async (ctx, next) => {
  await next();
});

module.exports = router;

编写控制器逻辑

控制器负责处理用户的请求,并返回相应的响应。控制器逻辑写在 app/controller 目录下。

示例代码:

// app/controller/home.js
module.exports = {
  index(ctx) {
    ctx.body = 'Hello, world!';
  },
};

// app/controller/user.js
module.exports = {
  list(ctx) {
    // 模拟从数据库获取用户列表
    const users = [
      { id: 1, name: 'Tom' },
      { id: 2, name: 'Jerry' },
    ];
    ctx.body = users;
  },
};
模板引擎与视图

安装模板引擎

Egg.js 支持多种模板引擎,如 Nunjucks、EJS 和 Pug。这里以 Nunjucks 为例,说明如何安装和使用模板引擎。

  1. 安装 Nunjucks:
    npm install nunjucks
  2. 配置 Nunjucks:

    // config/config.default.js
    module.exports = appInfo => {
     const config = {};
    
     // 使用 Nunjucks 模板引擎
     config.view = {
       defaultViewEngine: 'nunjucks',
       mapping: {
         '.html': 'nunjucks',
       },
     };
    
     return config;
    };
  3. 创建模板文件:
    app/view 目录下创建模板文件,如 home/index.html

示例代码:

<!-- app/view/home/index.html -->
<!DOCTYPE html>
<html>
<head>
  <title>Home Page</title>
</head>
<body>
  <h1>Welcome to Home Page</h1>
</body>
</html>

使用模板引擎渲染视图

在控制器中使用模板引擎渲染视图。

示例代码:

// app/controller/home.js
module.exports = {
  index(ctx) {
    // 渲染模板文件并设置返回内容
    ctx.body = ctx.render('home/index');
  },
};
数据库集成与 ORM

连接数据库

Egg.js 支持多种数据库,如 MySQL、MongoDB 和 PostgreSQL。这里以 MySQL 为例,说明如何连接数据库。

  1. 安装 egg-mysql 插件:
    npm install egg-mysql
  2. 配置数据库连接:

    // config/plugin.js
    exports.mysql = {
     enable: true,
     package: 'egg-mysql',
    };
    
    // config/config.default.js
    module.exports = appInfo => {
     const config = {};
    
     // 数据库连接配置
     config.mysql = {
       client: {
         host: 'localhost',
         port: 3306,
         user: 'root',
         password: 'password',
         database: 'test',
       },
       app: true,
       agent: false,
     };
    
     return config;
    };

使用 Sequelize 进行 ORM 操作

Sequelize 是一个基于 Promise 的 ORM,支持多种数据库。下面将使用 Sequelize 进行数据库操作。

  1. 安装 egg-sequelize 插件:
    npm install egg-sequelize
  2. 配置 Sequelize:

    // config/plugin.js
    exports.sequelize = {
     enable: true,
     package: 'egg-sequelize',
    };
    
    // config/config.default.js
    module.exports = appInfo => {
     const config = {};
    
     // 数据库连接配置
     config.sequelize = {
       dialect: 'mysql',
       dialectOptions: {
         charset: 'utf8mb4',
       },
       host: 'localhost',
       port: 3306,
       user: 'root',
       password: 'password',
       database: 'test',
     };
    
     return config;
    };
  3. 创建模型:
    app/model 目录下创建数据库模型文件。

示例代码:

// app/model/user.js
module.exports = app => {
  const { Sequelize, Model } = app;

  class User extends Model {}

  User.init(
    {
      id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false,
      },
    },
    {
      sequelize: app.sequelize,
      tableName: 'users',
      timestamps: true,
      underscored: true,
    }
  );

  return User;
};
  1. 使用模型进行数据库操作:
    在控制器中使用模型进行数据库操作。

示例代码:

// app/controller/user.js
module.exports = {
  list(ctx) {
    const { User } = app.model;
    User.findAll().then(users => {
      ctx.body = users;
    });
  },
};
模块化开发与中间件使用

Egg.js 的模块化思想

Egg.js 采用了模块化的设计思想,将不同的功能模块化,使得代码更加清晰易于维护。模块化设计允许开发者定义独立的功能模块,这些模块可以被复用和组合,从而提高开发效率和代码质量。

自定义中间件的编写与使用

中间件是 Egg.js 的一个重要特性,它可以处理请求的生命周期中的各个阶段。你可以在 app/middleware 目录下编写自定义中间件。

示例代码:

// app/middleware/logger.js
module.exports = () => {
  return function logger(ctx, next) {
    console.log(`Request to ${ctx.url} at ${new Date().toLocaleString()}`);
    return next().catch(err => {
      console.error(`Request to ${ctx.url} failed with error: ${err.message}`);
      throw err;
    });
  };
};

app/router.js 中使用自定义中间件:

// app/router.js
const Router = require('koa-router');
const router = new Router();

router.get('/', async (ctx, next) => {
  await next();
});

// 使用自定义中间件
router.use('/user', app.middleware.logger());
router.get('/user', async (ctx, next) => {
  await next();
});

module.exports = router;

通过以上步骤,你可以创建一个简单的 Egg.js 项目,并了解如何使用 Egg.js 进行路由、模板引擎、数据库集成以及模块化开发。希望这个教程能帮助你快速入门 Egg.js 项目开发。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消