koa-join

koa-join中间件将一个combo请求拆分成多个urls,并传给后续中间件处理,当所有中间件处理完成后koa-join将完成内容的合并。

koa-join

基于koa的前端开发环境中间件,它将一个combo请求拆分成多个urls,并传给后续中间件处理,当所有中间件处理完成后koa-join将完成内容的合并。请与koa-assetskoa-charset等其他中间件配合使用。

koa 依赖支持 generator 的 Node 环境,准确来说,是 node >= 0.11.9 的环境。

$ npm install --save koa
$ npm install --save koa-join
$ npm install --save koa-assets

请务必使用node --harmony模式运行程序,例如:

$ node --harmony index.js

为了方便,可以将在你的.bash_profile中将node设置为默认启动harmony模式的别名:

alias node='node --harmony'
var koa = require('koa');
var join = require('koa-join');
var assets = require('koa-assets');
 
var app = koa();
 
app.use(join());
app.use(assets({
  urls: [{
    rule: /tm\/([\S]+?)\/[\d\.]+/,
    dest: '~/dev/tm/$1'
  }]
}));
 
app.listen(80);

在使用koa-assets作本地代理时,请将g.tbcdn.cng.assets.daily.taobao.net绑定到本地ip 127.0.0.1上。

127.0.0.1  g.tbcdn.cn
127.0.0.1. g.assets.daily.taobao.net

koa-join请求响应的默认编码是utf-8,但我们可以通过koa-charset中间件进行编码设定和字符编码转换,例如:

app.use(function *(next){
  yield next;
  //对指定url的请求设置成gbk编码
  if(this.url.indexOf('tm/buy') !== -1){
    this.charset = 'gbk';
  }
});
$ node --harmony index.js #mac下监听80端口可能需要sudo权限

每一个请求都会创建一段上下文。在控制业务逻辑的中间件中,上下文被寄存在 this 对象中:

app.use(function *(){
  this; // 上下文对象 
  this.url; //请求url原始,例如/??a.css,b.css
  this.urls; //经过koa-join映射出的url数组,例如["/a.css", "/b.css"]
  this.contents; //用来供其他中间件放入的内容的Array,元素类型是字符串
app.use(join());
/*
 * 自定义其他中间件
 */
app.use(function*(next){
  var urls = this.urls;
  var contents = this.contents;
  yield urls.map(function*(url, idx){
    //定义内容获取方式
    var conts = fs.readFileSync(url);
    //将内容放入所在它的位置 
    contents[idx] = String(conts);
  });
});

MIT