Node框架 【Egg-企业级框架】

简介: Node框架 【Egg-企业级框架】

🌟前言

哈喽小伙伴们,新的专栏 Node 已开启;这个专栏里边会收录一些Node的基础知识和项目实战;今天我们继续带大家了解Node的框架 Egg ;让我们一起来看看吧🤘


🌟Egg.js 是什么?

Egg-官方网址


Egg.js 是阿里开发团队基于 Node.js 和 Koa开发的的开源企业级框架,团队架构师和技术负责人可以基于 egg 孕育出适合自己团队的上层业务框架,帮助开发团队降低开发和维护成本。


Express 和 Koa 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低。


Egg.js 基于 ES6、ES7、Typescript及 Koa2 使得 Nodejs 具有更规范的开发模式、更低的学习成本、更优雅的代码、更少的开发成本、更少的维护成本。


🌟Egg.js 的特性:

1. 提供基于 Egg 定制上层框架的能力

2. 高度可扩展的插件机制

3. 内置多进程管理

4. 基于 Koa 开发,性能优异

5. 框架稳定,测试覆盖率高

6. 渐进式开发


🌟Egg.js 的历史?

2013 年蚂蚁的 chair 框架,可以视为 egg 的前身。

2015 年 11 月,在苏千的召集下,阿里各 BU 的前端骨干齐聚黄龙,闭门共建。 2016 年初,各 BU 的基础 web 框架完成升级,在同一套规范的基础上进行差异化定制。

2016 年中,广泛使用在绝大部分阿里的前端 Node.js 应用。

2016 年 09 月,在 JSConf China 2016 上亮相并宣布开源。

2017 年初,官网文档 egg - 为企业级框架和应用而生 亮相,并将在本月发布 egg@1.0版本。

2017 年 12 月左右 Egg 社区版 2.0 正式发布,性能提升 30%,基于 koa2 拥抱 Async

2018 年 7 月最新 egg 的版本是 2.2.1

经过几年的沉淀 Egg 已经非常成熟。


🌟Egg 继承于 Koa

Koa 是一个非常优秀的框架,然而对于企业级应用来说,它还比较基础。而 Egg 选择了 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强。


Node.js 8 正式进入 LTS 后,async function 可以在 Node.js 中使用并且没有任何性能问题了,Egg 2.x 基于 Koa 2.x,框架底层以及所有内置插件都使用 async function 编写,并保持了对 Egg 1.x 以及 generator function 的完全兼容,应用层只需要升级到 Node.js 8 即可从 Egg 1.x 迁移到 Egg 2.x。


底层基于 Koa 2.x,异步解决方案基于 async function。

官方插件以及 Egg 核心使用 async function 编写。

建议业务层迁移到 async function 方案。

只支持 Node.js 8 及以上的版本。

🌟使用脚手架搭建项目环境

使用Eggjs开发项目,推荐直接使用脚手架,只需几条简单指令,即可快速生成用于生产的项目开发环境。通过快速选择适合对应业务模型的脚手架,快速启动Egg.js 项目的开发。


🌟环境准备

名称 说明
操作系统 支持 macOS,Linux,Windows
运行环境 Nodejs 建议选择 LTS 版本,Nodejs 最低要求 8.x。

🌟搭建项目环境方式

🌟无需安装egg脚手架初始化项目

直接使用脚手架,只需几条简单指令,即可快速生成项目(npm >=6.1.0): 无需安装egg脚手架,即可快速初始化,生成项目(npm >=6.1.0):

$ mkdir egg-example && cd egg-example
$ npm init egg --type=simple
$ npm i

启动项目:

$ npm run dev
$ open http://localhost:7001

🌟安装egg脚手架初始化项目

使用NPM全局安装egg脚手架:

npm i egg-init -g

命令:

$ egg-init -h
init egg project from boilerplate.
Usage: egg-init [dir] --type=simple
选项:
  --type          boilerplate type                                      [字符串]
  --dir           target directory                                      [字符串]
  --force, -f     force to override directory                             [布尔]
  --template      local path to boilerplate                             [字符串]
  --package       boilerplate package name                              [字符串]
  --registry, -r  npm registry, support china/npm/custom, default to auto detect
                                                                        [字符串]
  --silent        don't ask, just use default value                       [布尔]
  --version       显示版本号                                              [布尔]
  -h, --help      显示帮助信息                                            [布尔]

🌟快速初始化

egg-init 创建项目

$ egg-init egg-example --type=simple
$ cd egg-example
$ npm install

你可以使用骨架类型,像下面这样:

$ npm init egg --type=simple
骨架类型 说明
simple 简单 egg 应用程序骨架
empty 空的 egg 应用程序骨架
plugin egg plugin 骨架
framework egg framework 骨架

启动项目

$ npm run dev
$ open http://localhost:7001

🌟启动项目

在本地开发时,使用 egg-bin dev 来启动服务。通过这种方式启动应用进行开发活动,当我们修改代码并保存后,应用会自动重启实时生效。

🌟npm命令

将egg-bin dev 添加 npm scripts 到 package.json:

{
    "scripts": {
        "dev": "egg-bin dev"
    }
}

这样我们就可以通过 npm run dev 命令启动应用。


🌟环境配置

本地启动的应用是以 env: local 启动的,读取的配置也是 config.default.js 和 config.local.js 合并的结果。


🌟指定端口

本地启动应用默认监听 7001 端口,可指定其他端口,例如:

{
  "scripts": {
    "dev": "egg-bin dev --port 7001"
  }
}

🌟目录结构

当我们使用脚手架(egg-init)创建出项目后,会生成项目目录结构,对于项目目录结构我们必须了解。

🌟目录约定规范

egg-project
├── app
|   ├── router.js
│   ├── controller
│   │   └── home.js
│   ├── service (可选)
│   │   └── user.js
│   ├── middleware (可选)
│   │   └── response_time.js
│   ├── schedule (可选)
│   │   └── my_task.js
│   ├── public (可选)
│   │   └── reset.css
│   ├── view (可选)
│   │   └── home.tpl
│   └── extend (可选)
│       ├── helper.js (可选)
│       ├── request.js (可选)
│       ├── response.js (可选)
│       ├── context.js (可选)
│       ├── application.js (可选)
│       └── agent.js (可选)
├── config
│   ├── plugin.js
│   ├── config.default.js
│   ├── config.prod.js
│   ├── config.test.js (可选)
│   ├── config.local.js (可选)
│   └── config.unittest.js (可选)
├── test
│   ├── middleware
│   │   └── response_time.test.js
│   └── controller
│       └── home.test.js
├── package.json
├── app.js (可选)
├── agent.js (可选)
└── README.md

框架约定的目录:

路径

描述

app/router.js

用于配置 URL 路由规则,具体参见 Router。

app/controller/**

用于解析用户的输入,处理后返回相应的结果,具体参见 Controller。

app/service/**

用于编写业务逻辑层,可选,建议使用,具体参见 Service。

app/middleware/**

用于编写中间件,可选,具体参见 Middleware。

app/public/**

用于放置静态资源,可选,具体参见内置插件 egg-static。

app/extend/**

用于框架的扩展,可选,具体参见框架扩展。

config/config.{env}.js

用于编写配置文件,具体参见配置。

config/plugin.js

用于配置需要加载的插件,具体参见插件。

test/**

用于单元测试,具体参见单元测试。

app.js 和 agent.js

用于自定义启动时的初始化工作,可选,具体参见启动自定义。关于agent.js的作用参见Agent机制。

由内置插件约定的目录:

路径 描述
app/public/** 用于放置静态资源,可选,具体参见内置插件 egg-static。
app/schedule/** 用于定时任务,可选,具体参见定时任务。

若需自定义自己的目录规范,参见 Loader API:

路径 描述
app/view/** 用于放置模板文件,可选,由模板插件约定,具体参见模板渲染。
app/model/** 用于放置领域模型,可选,由领域类相关插件约定,如 egg-sequelize


目录
相关文章
|
20天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端框架
【10月更文挑战第34天】在数字化时代,后端开发如同一座桥梁,连接着用户界面与数据处理的两端。本文将通过Node.js这一轻量级、高效的平台,带领读者领略后端框架的魅力。我们将从基础概念出发,逐步深入到实战应用,最后探讨如何通过代码示例来巩固学习成果,使读者能够在理论与实践之间架起自己的桥梁。
|
2月前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
9天前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
26天前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
39 4
|
2月前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
52 1
|
21天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
23天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
27 0
|
2月前
|
JSON JavaScript 前端开发
Node.js Express 框架
10月更文挑战第7天
30 2
|
2月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express框架构建Web服务器
使用Node.js和Express框架构建Web服务器
|
2月前
|
Web App开发 JavaScript API
构建高效后端系统:Node.js与Express框架的实践之路
【9月更文挑战第37天】在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据处理和业务逻辑的重要职责。本文将深入探讨如何利用Node.js及其强大的Express框架来搭建一个高效、可扩展的后端系统。我们将从基础概念讲起,逐步引导读者理解并实践如何设计、开发和维护一个高性能的后端服务。通过实际代码示例和清晰的步骤说明,本文旨在为初学者和有经验的开发者提供一个全面的指南,帮助他们在后端开发的旅途上走得更远。
50 3