【20211123】CmsWing代码分析 - src/controller/home/ceshi.js

本文分析了CmsWing项目中`src/controller/home/ceshi.js`的测试代码,涉及require与include的区别、module.exports、think.Controller、async/await用法、日期时间处理、邮件发送、钩子调用测试、数据获取等内容。该文件用于测试各种功能,如钩子、邮件发送等,虽然在最终产品中作用较小,但在开发过程中的重要性不言而喻。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

src/controller/home/

这个文件夹名字看起来像是控制器的主页部分。实际上代表了什么含义呢?这就要靠我们的分析去探索了。

src/controller/home/ceshi.js

我们猜测这是测试的相关代码。(那么为什么不写成test而是写成拼音的ceshi呢,要知道这是一个不好的习惯。)

开头就是很长的一段代码,让我们一点点拆解。

const fs = require('fs');

开头的require调用include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。

module.exports = class extends think.Controller {
   }

https://www.cnblogs.com/fayin/p/6831071.html介绍了module.exports的用处:CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。require方法用于加载模块。这也可以解释上面为何调用require方法。

https://thinkjs.org/zh-cn/doc/3.0/controller.html解释了think.Controller的作用。MVC 模型中,控制器是用户请求的逻辑处理部分。比如:将用户相关的操作都放在 user.js 里,每一个操作就是里面一个 Action。项目中的 controller 需要继承 think.Controller 类,这样能使用一些内置的方法。当然项目中可以创建一些通用的基类,然后实际的 controller 都继承自这个基类。

之后的定义其中有几个async函数。具体解释见这里https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function,我这里只把介绍搬运过来:async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Promise中返回的内容, 获取的是Promise函数中resolve或者reject的值

async fetchAction() {
   
    const res = await this.fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png');
   	// console.log(res);
    // const dest = fs.createWriteStream('./octocat.png');
    // res.body.pipe(dest);
    this.header('Content-Type', 'image/png');
    return this.body = res.body;
  }

这一段是“获取”的动作,如上文所示使用await关键字获取资源,并在最后返回标题和图片。

  async donatesAction() {
   
    return this.body = 'donates';
  }

这一段是定义了一个“捐赠”的动作,返回结果是把内容body换成捐赠相关的内容。

async emailAction() {
   
    const transport = {
   
      service: 'qq',
      auth: {
   
        user: 'arterli@qq.com', // your account
        pass: 'vxheoipkldjgbhgi' // authorization code, not the email password
      }
    };
    const options = {
   
      from: 'arterli@qq.com', // sender address
      to: 'cmswing@126.com', // list of receivers
      subject: 'this is subject'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值