Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.6 添加扩展 ~ 1.4 结论
创始人
2024-03-16 08:54:19
0

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();

然后在模板中使用它。


{{ 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 单元测试,而不用担心设置测试工具,而是编写测试逻辑。请参阅单元测试。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...