美文网首页SH的全栈笔记
koa2-response了解一下?

koa2-response了解一下?

作者: SH的全栈笔记 | 来源:发表于2018-07-23 09:48 被阅读0次

背景

前不久把项目中用了很久的一个伪中间件撸成了一个npm包发布了出去。

为什么叫伪中间件?正常的中间件的引用方式, 就拿body-parser为例。

var Koa = require('koa');
var bodyParser = require('koa-bodyparser');

var app = new Koa();
app.use(bodyParser());

app.use(async ctx => {
  // the parsed body will store in ctx.request.body
  // if nothing was parsed, body will be an empty object {}
  ctx.body = ctx.request.body;
});

反观我撸的伪中间件的引用方式。

const response = require('../uitls/Response');
const data = {};
response.success(ctx, data);

为什么要这么干呢...纯粹是因为这个伪中间件与现有项目的耦合度太高了,
为(就)了(是)方(懒)便在项目里面把这个伪中间件的引用方式从本地工具组件换成从node_modules里引用。
例如这样。

const response = require('koa2-response');
const data = {};
response.success(ctx, data);

经过一番折腾,项目中的引用方式全部替换完了。然后我的学弟就看不下去了。。。提了一个pullrequest给我。把这个着实封装成了
一个中间件。

优化

首先是改变了引用方式,之前的方式是直接导出了一个对象,这个对象有两个方法,分别是success和error。使用这种方式,就必须要在每个
controller中都引用一次,如下。

const response = require('../utils/Response');

优化之后,只需要在node的入口文件中做如下操作就好

const koa = require('koa');
const app = new koa();
const router = require('koa-router')();
const response = require('koa2-response');

const code = {
  UNKNOWN_ERROR: [1, 'Sorry, you seem to have encountered some unknown errors.']
}

router
  .get('/', (ctx, next) => {
    ctx.success({
      name: 'test'
    })
  })
  .get('/error_test', (ctx, next) => {
     ctx.error(code.UNKNOWN_ERROR);
  })

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000);

console.log(`Server is running on port 3000`);

对比两种方式可能有有些疑问,第一种方式,需要传入ctx,而改良之后的方式没有了ctx。那是因为在中间件中做了如下处理。

const { success, error } = require('./util');

module.exports = async (ctx, next) => {
    ctx.success = success.bind(null, ctx);
    ctx.error = error.bind(null, ctx);
    await next();
}

这样一来,koa的上下文ctx就会被当作ctx.success的默认第一个参数。针对不同模块的controller,不需要再去单独引用一次
依赖包,可以直接通过ctx对中间件进行调用。相对于最初的版本,这样大大的提高了开发的效率。

写在后面

对于这个,还是有些顾虑。如果koa之后更新的时候,也出现了success和error的方法,再引入这个包,就会覆盖掉koa方法。
不知道会不会带来什么问题。

Pull Request地址 非常皮的pull request地址

Github传送门 koa2-response

个人博客传送门 detectiveHLH

相关文章

  • koa2-response了解一下?

    背景 前不久把项目中用了很久的一个伪中间件撸成了一个npm包发布了出去。 为什么叫伪中间件?正常的中间件的引用方式...

  • Koa中更方便简单发送响应的方式

    Github传送门 koa2-response 背景 最近做了很多node的后台项目,写了很多接口,但是发现随着接...

  • 了解一下

    中国互联网公司Top10,你不能只知道BAT 网络信息中心8月20日发布了互联网报告称到今年6月份中国网民数量已经...

  • 了解一下

    焦炭味的面包 了解一下 下班早了 回到家感觉很空 想学点东西 又静不下来心 焦虑

  • 了解一下

    什么也没有 就是了解一下

  • 了解一下

    白糖、红糖、冰糖 三者功效有差别吗 怎样吃最合适 赶紧来看看吧 白糖、红糖、冰糖,其实大都是从甘蔗里面提取的,都属...

  • 了解一下

    今天看了一下《战争论》这本书,看不太懂,里面涉及到政治、军事、哲学上的问题。为什么要看呢?世间万物都是相通的...

  • 了解一下

    八国联军是哪八国? 日本军8000人;德国军7000人;沙俄军4800人;英国军3000人;美国军2100人;法国...

  • LiveData了解一下

    什么是LiveData 它可以用来持有 可被观察的数据,可以感知到UI组件的生命周期,只有组件处于活动(START...

  • 减肥? 了解一下!

    以下请调成高分贝 “我要减肥、我要减脂。” “救命啊!我的腿好粗啊,怎么办?” “什么?老娘有双下巴啦???” 咳...

网友评论

    本文标题:koa2-response了解一下?

    本文链接:https://www.haomeiwen.com/subject/ebedmftx.html