Egg

Egg

本文仅用于学习记录,不存在任何商业用途,如侵删

文章目录

  • Egg
  • 1. 快速开始 Quick Start
    • 1.3 一步步 Step by Step
      • 1.3.6 添加扩展
      • 1.3.7 添加中间件
      • 1.3.8 添加配置
      • 1.3.9 添加单元测试
    • 1.4 结论

1. 快速开始 Quick Start

1.3 一步步 Step by Step

1.3.6 添加扩展

由于上一步并没有成功实现,后面的内容笔者就大致看看了。

在上一步中我们拿到的json数据中,time 是一个时间戳格式的,

很明显,这样不太友好。

Egg 为我们提供了一种快速扩展其功能的方法。我们只需要将扩展脚本添加到app/extend目录中。

有关更多信息,请参阅。扩展名。

在视图的情况下,我们可以只写一个助手作为扩展。

$ npm i moment --save
// app/extend/helper.js
const moment = require('moment');
exports.relativeTime = (time) => moment(new Date(time * 1000)).fromNow();

然后在模板中使用它。

<!-- app/view/news/list.tpl -->
{{ helper.relativeTime(item.time) }}
1.3.7 添加中间件

假设我们要禁止百度爬虫的访问。

聪明的开发者可能会很快猜到我们可以通过添加一个检查 User-Agent的中间件来实现它。

// app/middleware/robot.js
// options === app.config.robot
module.exports = (options, app) => {return async function robotMiddleware(ctx, next) {const source = ctx.get('user-agent') || '';const match = options.ua.some((ua) => ua.test(source));if (match) {ctx.status = 403;ctx.message = 'Go away, robot.';} else {await next();}};
};// config/config.default.js
// add middleware robot
exports.middleware = ['robot'];
// robot's configurations
exports.robot = {ua: [/Baiduspider/i],
};

现在尝试使用curl localhost:7001/news -A "Baiduspider".

有关详细信息,请参阅中间件。

1.3.8 添加配置

在编写业务逻辑时,我们不可避免地需要管理配置。

Egg 提供了一种强大的方法来在合并的配置文件中管理它们。

  • 环境特定的配置文件得到很好的支持,例如 config.local.js、config.prod.js 等。

  • 可以在任何方便应用程序/插件/框架的地方设置配置,Egg 会小心地合并和加载它们。

  • 有关合并的更多信息,请参阅配置。

// config/config.default.js
exports.robot = {ua: [/curl/i, /Baiduspider/i],
};// config/config.local.js
// only read at development mode, will override default
exports.robot = {ua: [/Baiduspider/i],
};// app/service/some.js
const Service = require('egg').Service;class SomeService extends Service {async list() {const rule = this.config.robot.ua;}
}module.exports = SomeService;
1.3.9 添加单元测试

单元测试非常重要,Egg 还提供了egg-bin来帮助你轻松编写测试。

所有的测试文件都应该放在{app_root}/test/**/*.test.js.

// test/app/middleware/robot.test.js
const { app, mock, assert } = require('egg-mock/bootstrap');describe('test/app/middleware/robot.test.js', () => {it('should block robot', () => {return app.httpRequest().get('/').set('User-Agent', 'Baiduspider').expect(403);});
});

然后添加npm scripts.

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

还要安装依赖项:

$ npm i egg-mock --save-dev

运行。

$ npm test

这就是全部,有关更多详细信息,请参阅单元测试。

1.4 结论

上面这些短小节,我们只能触到Egg的冰山一角。然后去哪儿?阅读我们的文档以更好地理解框架。

  • 关于 Egg 样板类型,请参见样板类型说明。
  • Egg 为扩展功能提供了强大的机制。请参阅插件。
  • Egg 框架允许小型或大型团队在有据可查的约定和编码最佳实践下尽可能快地一起工作。此外,团队可以在框架之上构建逻辑,以更好地满足他们的特殊需求。在 [Frameworks] 上查看更多信息。(…/advanced/framework.md)。
  • Egg 框架提供代码可重用性和模块化。请参阅Progressive的详细信息。
  • Egg 框架使开发人员能够使用许多插件和社区驱动的工具编写无痛的单元测试。团队应该尝试使用 Egg 单元测试,而不用担心设置测试工具,而是编写测试逻辑。请参阅单元测试。

Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.6 添加扩展 ~ 1.4 结论相关推荐

  1. Unity editor 快速上手 quick start

    Unity editor 快速上手 quick start Warning:非干货,是比较个人向的快速上手的代码例子,不一定是最好的方法,但能work. 主要目的是做一个可以动态添加和移除新的行的自定 ...

  2. Ambari添加快速链接Quick Links

    软件环境 软件环境 版本号 JDK jdk1.8.0_321 Mysql 5.7.29 Ambari 2.7.5.0 HDP 3.1.5.0 据说是2.3 版本后 也就是2.4 的Ambari才支持了 ...

  3. 插件 | 蛋白序列集合功能注释快速完成 - Quick Protein Anno

    写在前面 下游数据分析的时候,大体会遇到以下两个场景: 手工查看基因组任意位置的基因,具体的注释信息,以及其前后基因的功能注释信息 手上有某个序列或者某几个序列,想要快速知道这些序列对应的蛋白到底都有 ...

  4. ATF快速扫盲(Quick Start)

    快速链接: .

  5. Android快速设置Quick Settings Tile

    快速设置QuickSettings是Android7.0推出的新特性,就是我们平时手机常用的下拉快捷控制,可以直接从通知栏显示一些关键的设置和操作,例如:打开/关闭手电筒.蓝牙.Wifi 等等许多功能 ...

  6. 【算法Algorithm】快速(Quick)排序

    算法思想 从待排序数组中找一个索引位置(例如,中间位置.开始位置.结束位置)的数作为轴,以这个轴为基准,把大于这个轴的数放到它的后面,把小于这个轴的数放到它的前面,至于相等的可以放在前面也可以放在后面 ...

  7. 计算机怎么快速改图片名称,如何批量修改文件名?批量修改照片文件名和添加前缀方法...

    通常我们使用手机或者相机拍摄了一堆照片拷贝到电脑之后,照片的命名通常都是随机混乱的,如果要规范文件命名,你是不是会去一个一个去修改文件名呢?其实完全不需要这么麻烦,今天电脑百事小编就来教大家一个批量快 ...

  8. IntelliJ IDEA快速入门 | 第三十一篇:在IntelliJ IDEA 2020.3.3中添加Tomcat镜像并部署Web工程

    写在前面 讲完模板以后,咱们来说一下如何在IntelliJ IDEA当中去创建Java Web的工程.这里,我们主要分两种情况来讲,第一种是如何创建静态的Java Web工程,另外一种是如何创建动态的 ...

  9. Win7 开启显示快速启动工具栏,发送到快速启动右键菜单

    开启Win7快速启动栏 许多网友一定记得在 Windows 7 之前的 Windows 系统都有个快速启动(quick launch)区域. 比如 IE 浏览器.Windows Media Playe ...

最新文章

  1. 基于Python操作ElasticSearch
  2. 计算机网络知识点4——计算机网络性能
  3. python编写自定义函数判断n1-n2范围内的素数_【每日道代码题001】- PYTHON基础复习...
  4. 【转】浅谈TDD、BDD、ATDD、DDD的区别
  5. matlab表示DFT和DTFT,【 MATLAB 】离散傅里叶级数(DFS)与DFT、DTFT及 z变换之间的关系...
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的课堂考勤系统
  7. MySQL中concat()与group_concat()用法
  8. Matlab使用过程中内存不足问题的总结(修改)
  9. 人物 | 当我们在谈论语音识别时,我们在谈些什么?——知乎达人、CMU博士生王赟...
  10. 如何在.Netcore控制台应用中使用依赖注入(4)
  11. .Net Micro Framework移植基础(包编译通过)
  12. 06. Java面向对象——更改器方法和访问器方法
  13. vue中Axios的封装和API接口的管理
  14. 【学习OpenCV】使用OpenCV播放AVI视频
  15. 【蓝桥杯】单片机学习(7)——UART串口通信
  16. 对比PAYPAL和国际信用卡支付的流程
  17. 差错控制 —— 码距和纠错编码(海明码)
  18. 诺威达K2201s/全志p9处理器/线刷救砖包
  19. C语言基础 判断周几
  20. 利用网络爬虫爬取知乎回答者的信息及回答内容

热门文章

  1. sql批量更新update嵌套select更新
  2. 华软java综合实验二_2018-2019-2 20175311 实验二 《Java开发环境的熟悉》实验报告
  3. 【干货】外贸业务员的客户开发信为什么总是进老外垃圾邮箱?
  4. excel 用公式查找单元格
  5. java 中断程序_Java中断机制
  6. 微信无法打开网页下载链接的解决方案,微信跳转外部浏览器
  7. win10自带的 快速截图功能
  8. GIS本科毕业如何防止结束GIS职业生涯
  9. Trigger触发器常见问题
  10. websocketapp保活,还没吃透内存缓存LruCache实现原理的看这篇文章,看完直呼内行