我的第一个koa中间件——koa-json-replacer

作者:杨润炜
日期:2016/7/15 12:43

为啥要写这个中间件

在express中有json replacer的功能,可以对返回到前端的json数据进行处理。具体实现如下:

  1. app.set('json replacer', function (key, value) {
  2. if (this[key] instanceof Date) {
  3. value = this[key].getTime();
  4. }
  5. return value;
  6. });

上述代码可以对返回的json数据中Date类型的数据进行时间戳的计算并替换。

然而在koa中没有相应的功能,但可以通过中间件的形式来实现。这便是koa-json-replacer
readme.md上有使用的示例。这里不再多说了。

源码剖析

源码十分简单,这里可以贴出来把细节说一下。注意看每行的注释喔。

  1. 'use strict';
  2. var isJSON = require('koa-is-json');
  3. /**
  4. * Replacer JSON response middleware.
  5. * @param {Function} replacer
  6. * @returns {GeneratorFunction}
  7. */
  8. module.exports = function (replacer) {
  9. return function *(next) { // koa中间件需要采用generator或promise
  10. yield *next; // koa中间件特性,这里可以保证下面的代码会在接口逻辑处理完之后执行。
  11. if (typeof replacer !== 'function') return; // 验证传入参数类型
  12. var body = this.body;
  13. var json = isJSON(body);
  14. if (!json) return; // 验证返回的数据是否是json形式
  15. // replacer JSON response
  16. return this.body = JSON.stringify(body, replacer); // 最核心部分,对json数据进行处理
  17. };
  18. };

感悟

第一个koa中间件,可以小小的满足一下自己的好奇心。通过看别人的中间件写法,也学习了很多,特别是对koa执行过程的有了了解。

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/65.html
邮箱:glowrypauky@gmail.com
QQ: 892413924