Egg.js 系列(1):Egg是什么、快速入门、目录结构

你好,我是沐爸,欢迎点赞、收藏、评论和关注。

一、Egg.js 是什么?

Egg.js 为企业级框架和应用而生。我们希望 Egg.js 能孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。

官网地址:egg - 为企业级框架和应用而生 - Egg

设计原则

Egg 奉行“约定优于配置”。

Egg vs Express vs Koa

1.三者的关系

  • Koa 由 Express 原班人马打造,Egg 继承于 Koa。
  • 三者都采用 MVC 模型。

2.Koa vs Express

  • Koa 的中间件与 Express 不同,Koa 选择了洋葱圈模式(每个请求在经过一个中间件时都会执行两次)。
  • Express 只有 Request 和 Response 两个对象,Koa 增加了 Context 对象作为该次请求的上下文对象。

3.Egg vs Express vs Koa

  • Koa 和 Express 框架本身都缺少约定,都会导致千奇百怪的写法,降低了代码的可读性和可维护性。
  • Egg 按照一套统一的约定开发应用,可以减少沟通协作成本。

特性

  • 可定制上层框架的能力
  • 高度可扩展的插件机制
  • 内置多进程管理
  • 基于 Koa 开发,性能优异
  • 框架稳定,测试覆盖率高
  • 渐进式开发

Egg.js 在阿里的地位

阿里旗下的蚂蚁金服、天猫、UC、村淘、神马等产品都是在 Egg.js 基础上扩展的。

Egg.js 的历史

  • 2013年蚂蚁的 chair 框架,可以视为 egg 的前身。
  • 2015年11月,在苏千的召集下,阿里各部的前端骨干齐聚黄龙,闭门共建。
  • 2016年初,各部的基础 web 框架完成升级,在同一套规范的基础上进行差异化定制。
  • 2016年中,广泛使用在绝大部分阿里的前端 Node.js 应用。
  • 2016年9月,在 JSConf China 2016 上亮相并宣布开源。
  • 2017年初,官网文档亮相,并将在本月发布 egg@1.0版本。
  • 2017年12月左右 Egg 社区版 2.0 正式发布,性能提升 30%,基于 Koa2 拥抱 Async
  • ......
  • 2020年腾讯云在自己的 serverless framework 中集成了 egg.js。
  • 2024年7月最新 egg 的版本是 3.27.1

二、快速入门

环境准备

  • 操作系统:支持 Windows、macOS、Linux
  • 运行环境:建议选择 LTS 版本, 最低要求 8.x

快速初始化

推荐直接使用脚手架。只需几条简单指令,即可快速生成项目(npm >= 6.1.0):

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

# http://127.0.0.1:7001

:请确保你使用的 npm 版本不低于 6.1.0。

逐步搭建

除了使用上面的快速初始化,还可以通过手动逐步搭建的方式创建项目,这有助于更好地了解 Egg。对于逐步搭建,官网讲的比较详细。注意:实际项目开发中,推荐使用脚手架直接初始化。

三、目录结构

以下是由框架约定的目录结构:

egg-project
├── package.json
├── app.js(可选)										# 用于自定义启动时的初始化工作
├── agent.js(可选)									# 用于自定义启动时的初始化工作
├── app
|   ├── router.js 									# URL 路由规则
│   ├── controller									# 控制器
│   │   └── home.js
│   ├── service(可选)							# 服务(业务逻辑)
│   │   └── user.js
│   ├── model(可选)								# 数据库模型
│   │   └── 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

 好了,分享结束,谢谢点赞,下期再见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/885899.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DBC差异比较工具DBCCompare_原理介绍(四)

DBC比对工具UI图片 DBC比对工具:功能详解与源码分析 在现代汽车开发和诊断过程中,DBC(Database Container)文件扮演着至关重要的角色。它们详细描述了CAN(Controller Area Network)网络中各消息和信号的详…

GB28181信令交互流程及Android端设备对接探讨

GB28181规范必要性 好多开发者在做比如执法记录仪、智能安全帽、智能监控等设备端视频回传技术方案选型的时候,不清楚到底是用RTSP、RTMP还是GB28181,对GB28181相对比较陌生,我们就GB28181规范的必要性,做个探讨: 实现…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十八章 Linux编写第一个自己的命令

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

企业安全策略制定

如今,网络安全是所有组织的必需品,而不是奢侈品。现代企业面临着针对其数据、网络和系统的复杂且不断演变的威胁。 即使一个漏洞也可能导致严重违规、财务损失和声誉受损。正如堡垒依靠多层防御共同作用一样,公司的安全措施必须作为一个整体…

【学习笔记】手写 Tomcat 六

目录 一、线程池 1. 构建线程池的类 2. 创建任务 3. 执行任务 测试 二、URL编码 解决方案 测试 三、如何接收客户端发送的全部信息 解决方案 测试 四、作业 1. 了解工厂模式 2. 了解反射技术 一、线程池 昨天使用了数据库连接池,我们了解了连接池的优…

渗透测试--文件上传常用绕过方式

文件上传常用绕过方式 1.前端代码,限制只允许上传图片。修改png为php即可绕过前端校验。 2.后端校验Content-Type 校验文件格式 前端修改,抓取上传数据包,并且修改 Content-Type 3.服务端检测(目录路径检测) 对目…

医院体检管理系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,体检分类管理,体检套餐管理,体检预约管理,体检报告管理,系统管理 微信端账号功能包括:系统首页,体检套餐&a…

四、Drf认证组件

四、Drf认证组件 4.1 快速使用 from django.shortcuts import render,HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.authentication import BaseAuthentication from rest_framework.exception…

数据结构:将复杂的现实问题简化为计算机可以理解和处理的形式

整句话的总体意义是,**数据结构是用于将现实世界中的实体和关系抽象为数学模型,并在计算机中表示和实现的关键工具**。它不仅包括如何存储数据,还包括对这些数据的操作,能够有效支持计算机程序的运行。通过这一过程,数…

利用PDLP扩展线性规划求解能力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Java项目实战II基于Java+Spring Boot+MySQL的甘肃非物质文化网站设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 甘肃省作为中国历史文化名省,拥有丰富的非物质文化遗产资源,涵盖表演艺术、手…

TypeScript 封装 Axios 1.7.7

随着Axios版本的不同,类型也在改变,以后怎么写类型? 1. 封装Axios 将Axios封装成一个类,同时重新封装request方法 重新封装request有几个好处: 所有的请求将从我们定义的requet请求中发送,这样以后更换…

Golang | Leetcode Golang题解之第441题排列硬币

题目: 题解: func arrangeCoins(n int) int {return sort.Search(n, func(k int) bool { k; return k*(k1) > 2*n }) }

【Unity服务】如何使用Unity Version Control

Unity上的线上服务有很多,我们接触到的第一个一般就是Version Control,用于对项目资源的版本管理。 本文介绍如何为项目添加Version Control,并如何使用,以及如何将项目与Version Control断开链接。 其实如果仅仅是对项目资源进…

09_OpenCV彩色图片直方图

import cv2 import numpy as np import matplotlib.pyplot as plt %matplotlib inlineimg cv2.imread(computer.jpeg, 1) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.show()plot绘制直方图 plt.hist(img.ravel(), 256) #ravel() 二维降一维 256灰度级…

学习记录:js算法(五十):二叉树的右视图

文章目录 二叉树的右视图我的思路网上思路 总结 二叉树的右视图 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 图一: 示例 1:如图一 输入: [1,2,3,null,5,null,4] …

C++面向对象基础

目录 一.函数 1.内联函数 2.函数重载 3.哑元函数 二.类和对象 2.1 类的定义 2.2 创建对象 三. 封装(重点) 四. 构造函数 constructor(重点) 4.1 基础使用 4.2 构造初始化列表 4.3 构造函数的调用方式(掌握…

解决方法:PDF文件打开之后不能打印?

打开PDF文件之后,发现文件不能打印?这是什么原因?首先我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…

秋招内推--招联金融2025

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

数据结构-LRU缓存(C语言实现)

遇到困难,不必慌张,正是成长的时候,耐心一点! 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…