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

news2025/1/12 15:46:53

文章目录

  • 🌟前言
  • 🌟Egg.js 是什么?
  • 🌟Egg.js 的特性:
  • 🌟Egg.js 的历史?
  • 🌟Egg 继承于 Koa
  • 🌟使用脚手架搭建项目环境
    • 🌟环境准备
    • 🌟搭建项目环境方式
    • 🌟无需安装egg脚手架初始化项目
    • 🌟安装egg脚手架初始化项目
    • 🌟快速初始化
  • 🌟启动项目
    • 🌟npm命令
    • 🌟环境配置
    • 🌟指定端口
  • 🌟目录结构
    • 🌟目录约定规范
  • 🌟写在最后

在这里插入图片描述

🌟前言

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

🌟Egg.js 是什么?

Egg-官方网址

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

ExpressKoaNode.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 应用程序骨架
pluginegg plugin 骨架
frameworkegg 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.jsconfig.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.jsagent.js用于自定义启动时的初始化工作,可选,具体参见启动自定义。关于agent.js的作用参见Agent机制。

由内置插件约定的目录:

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

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

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

🌟写在最后

更多Node知识以及API请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大型医院安全(不良)事件报告系统源码(支持二次开发)

医院安全(不良)事件管理系统通过规范事件上报、流转审批、数据统计、原因分析、措施制定、效果追踪的业务流程,全面覆盖医院所有科室,利用统计工具对本院不良事件数据进行深度分析,查找医疗安全管理的薄弱环节&#xf…

微信小程序的跨页面传参以及data-方法的相关细节

🙂博主:爱学习的Akali King 🙂文章核心:微信小程序的跨页面传参以及data-方法的相关细节 目录 前言wx.navigateTo()方法微信小程序传参的几种方式通过data-属性传参关于data-方法配合点击事件传参的细节 前言 其实在学习新东西的…

phpmyadmin弱口令至getshell 漏洞复现

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 环境部署02 漏洞配置03 利用方式04 修复方案 01 环境部署 (1)phpStudy phpStudy 是一款用于进行 PHP 环境调试的程序集成软件包。在软件安装后便 启动了 MySQL 服务、Apache…

【容灾系统搭建】网络杂谈(1)之容灾系统如何搭建?

涉及知识点 什么是容灾,容灾系统的建设,容灾系统的结构模型,容灾平台。深入了解容灾技术。 原创于:CSDN博主-《拄杖盲学轻声码》,更多内容可去其主页关注下哈,不胜感激 文章目录 涉及知识点前言1.容灾系统…

Android Jetpack Compose - 探索 BottomSheet

Jetpack Compose 是一种现代化的、声明式的 UI 工具集,它使得 Android 的 UI 开发变得更加简单和直观。在这篇文章中,我们将要探索其中的一种常用 UI 元素 —— 底部抽屉(BottomSheet)。 一、什么是 BottomSheet? 在 …

速度与技能的较量!飞桨黑客松 OpenVINO™ 任务获奖者经验分享

点击蓝字 关注我们,让开发变得更有趣 作者 | Fisher 排版 | 李擎 速度与技能的较量! 飞桨黑客松 OpenVINO™ 任务获奖者经验分享 前言/ 获奖经验分享,比赛轻松拿捏, 千元奖金拿到手软! 黑客松活动介绍 飞桨黑客马拉松是一项兼具编…

Vuex —— 同步和异步请求

上一篇讲到 Vuex 状态管理的内容,先来简单的回顾一下 Vuex ,Vuex 中有五个核心属性:state 、getter、mutation、action、module 。state: 存放数据状态,不能被直接的修改;getter: 基于 state 的计算属性;mu…

kaggle注册时出现一排“Captcha must be filled out.”

kaggle网址:Kaggle: Your Home for Data Science 想去kaggle下载一份数据,但是出现了一排红色的英文:(真是学习之路哪哪都是阻碍哭唧唧) ​ 出现该问题的原因:必须填写(图片)验证码,可是它没出…

长期不关路由器网速会变慢?一文读懂

如果把现代人最烦的十件事列一个清单,那么网速慢肯定其中一项。看剧的时候画面在转圈,玩游戏的时候角色在卡顿,真是让人非常恼火。 最近我家的网速也比刚安上网时慢了很多,看网上的说法是路由器太久没关了,应该天天关闭…

RESTful API是什么?

82. RESTful API是什么? 当我们构建应用程序或者开发Web服务时,常常需要提供一组接口供客户端访问和使用。RESTful API是一种常见的设计风格,它通过使用HTTP协议和一组规范的设计原则,提供了一种统一、可扩展和可维护的方式来构建…

2023金九银十Java基础-中级-高级面试题汇总(涵盖所有Java核心面试知识点)

寒冬来临,虽受眼前挫折,但咱程序猿(媛)也不能放弃啊!也许这次秋招不是很理想,但是没得关系啊,再过几个月就开始备战2023年的金九银十了呀,现在着手准备,既是给自己的秋招…

机器学习评估与度量指标

这里的内容主要包括:性能度量、比较检验和偏差与方差。在上一篇文章中,我们解决了评估学习器泛化性能的方法,即用测试集的"测试误差"作为"泛化误差"的近似,当我们划分好训练/测试集后,那如何计算&…

《Opencv3编程入门》学习笔记—第十章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第十章 角点检测 一、Harris角点检测 (一)兴趣点与角点 1、图像特征类型: 边缘角点(感兴趣点)斑点&#xf…

在pycharm上导出Anaconda3的环境配置文件

目录 1.原理: ​2.亲身实践: 1.原理: 要在PyCharm中导出Anaconda3环境的配置文件,可以使用conda命令行工具来完成。请按照以下步骤进行操作: 打开PyCharm,并确保项目使用的是Anaconda3环境。 在PyCha…

【小程序】如何手动绘制分享用的图片

上一篇【小程序】如何实现滑动翻页中介绍了如何在小程序中实现上下滑动翻页的效果。 如果要给这个产品增加一个生成图片用于分享到朋友圈的功能,又该如何实现呢? 先来看一下最终的效果图: 首先,新建一个页面(page&am…

vue+elementui实现英雄联盟道具城

目录 一、效果图 1.首页 2.商品列表、分类 二、实现重点讲解 1.首页轮播图 1.1技术实现: 1.2.鼠标聚焦切换图片事件 2.首页tab切换 3.商品列表实现 三、项目结构说明 四、总结 一、效果图 1.首页 项目与官方效果没有太大差异: 游戏导航&#xff1…

windows上VMware虚拟机彻底卸载详细教程

VMware虚拟机彻底卸载 一、彻底卸载过程1.1 停止VMware服务1.2 结束vmware任务1.3 开始卸载VMware1.4 删除注册表信息1.5 删除安装目录 二、vmware 安装教程三、vmware 使用教程 回到目录   回到末尾 一、彻底卸载过程 卸载之前,需要先关闭VMware相关的后台服务…

高速公路智慧稽核常用技术及发展方向浅析

交通运输部数据显示,截至2021年末,全国收费公路里程达18.76万公里,其中高速公路16.12万公里,占比高达85.9%,高速公路费用收缴的重要性尤为凸显。 收费系统作为高速公路的三大机电系统之一,在高速费用的收取…

【Java面试题】框架篇——Spring

文章目录 什么是Spring框架?Spring框架有哪些主要模块?Spring有几种配置方式?Spring框架中的单例Beans是线程安全的么?Spring 框架中都用到了哪些设计模式?★★★Spring AOP在实际项目中的应用★★★阐述一下Bean的生命…

使用 Transformers 为多语种语音识别任务微调 Whisper 模型

本文提供了一个使用 Hugging Face 🤗 Transformers 在任意多语种语音识别 (ASR) 数据集上微调 Whisper 的分步指南。同时,我们还深入解释了 Whisper 模型、Common Voice 数据集以及微调等理论知识,并提供了数据准备和微调的相关代码。如果你想…