赵可爱的egg分享

一、Egg.js 是什么?

由阿里巴巴团队开源的一套基于koa的应用框架,已经在集团内部服务了大量的nodejs系统。

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

1.设计原则

Egg 的插件机制有很高的可扩展性,一个插件只做一件事

(比如Nunjucks模板封装成了egg-view-nunjucks、MySQL 数据库封装成了egg-mysql)。Egg 通过框架聚合这些插件,并根据自己的业务场景定制配置,这样应用的开发成本就变得很低。

Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。

2.与express区别

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

基于koa,不同于koa以middleware为主要生态,egg根据不同的业务需求和场景,加入了plugin,extends等这些功能,可以让开发者摆脱在使用middleware功能时无法控制使用顺序的被动状态,而且还可以增加一些请求无关的一些功能。

3.架构

app/router.js:用于配置 URL 路由规则

app/controller/**:用于解析用户的输入,处理后返回相应的结果

app/service/**:用于编写业务逻辑层,可选

app/middleware/**:用于编写中间件,可选

app/public/**:用于放置静态资源,可选

app/extend/**:用于框架的扩展,可选

config/config.{env}.js:用于编写配置文件

config/plugin.js:用于配置需要加载的插件

test/**:用于单元测试

二、快速入门

1.快速初始化

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

$ npm init egg --type=simple

$ npm i

启动项目:

$ npm run dev

$ open http://localhost:7001

2.编写 Controller

如果你熟悉 Web 开发或 MVC,肯定猜到我们第一步需要编写的是 Controller 和 Router

通过 Controller 和 Router 来实现路由的跳转和页面的显示

配置路由映射:

3.静态资源

Egg 内置了 static 插件,线上环境建议部署到 CDN,无需该插件。

static 插件默认映射 /public/* -> app/public/* 目录

此处,我们把静态资源都放到 app/public 目录即可

4.模板渲染

绝大多数情况,我们都需要读取数据后渲染模板,然后呈现给用户。故我们需要引入对应的模板引擎。框架并不强制你使用某种模板引擎,开发者可以引入不同的插件来实现差异化定制。

例如使用 Nunjucks 来渲染,需要先安装对应插件

开启插件

为列表页编写模板文件,一般放置在 app/view 目录下

添加相应的 Controller 和 Router

5.编写 service

在实际应用中,Controller 一般不会自己产出数据,也不会包含复杂的逻辑,复杂的过程应抽象为业务逻辑层 Service。添加一个 Service 抓取数据 ,如下:

然后稍微修改下之前的 Controller:

6.编写扩展

扩展内编写一些常用的函数,用于加快开发。

这里,使用 View 插件支持的 Helper 来实现:

7.编写 Middleware

8.单元测试

单元测试非常重要,框架也提供了 egg-bin 来帮开发者无痛的编写测试。

测试文件应该放在项目根目录下的 test 目录下,并以 test.js 为后缀名,即 {app_root}/test/**/*.test.js。

然后配置依赖和 npm scripts:

"scripts": {"test":"egg-bin test", }

$ npm i egg-mock --save-dev

执行测试:

$ npm test

推荐阅读更多精彩内容

  • 快速初始化 启动项目 手动逐步搭建 添加npm scripts到package.json 编写Controller...
    极奏阅读 400评论 0 1
  • Egg.js是阿里开源的基于Koa的一个企业级Node框架,具体介绍在这里不做详细说明,想要了解更多可以查看Egg...
    白酒__阅读 8,282评论 0 3
  • 在实现 egg + vue 服务端渲染工程化实现之前,我们先来看看前面两篇关于Webpack构建和Egg的文章: ...
    hubcarl阅读 5,800评论 0 19
  • 1 环境搭建、创建、运行 1.1 介绍 1.2 环境搭建 1、要求nodejs版本必须大于8.0并且要用LTS 版...
    前端泥瓦匠阅读 700评论 0 4
  • Egg是什么? 由阿里巴巴团队开源的一套基于koa的应用框架,已经在集团内部服务了大量的nodejs系统。 Egg...
    强某某阅读 595评论 0 2
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 3,748评论 0 13
  • 夜莺2517阅读 127,218评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 5,962评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 2,967评论 4 6
  • 那一年,我选择了独立远行,火车带着我在前进的轨道上爬行了超过23个小时; 那一年,我走过泥泞的柏油路,在那个远离故...
    木芽阅读 1,390评论 4 5