koa 路由中间件
发布于 9 年前 作者 zhangking520 7256 次浏览 最后一次编辑是 8 年前 来自 分享

一个koa的路由中间件 https://github.com/zhangking/koar

支持错误处理,url映射,全局和controller级别过滤器。

使用方法

app.use(r.create({
  folder:'./Controllers/',
  before:function*(){},
  after:function*(){},
  error:function*(){this.body = 'error'},
  map:{
    '/user/:name':'/user/show'
  }
}));

中间件会遍历folder下的文件,把文件内的方法映射存储起来。 在方法内 return false 就结束调用。 一个controlller 像这样

var co = require('co');

var before = function *(next){
	var a = yield work;
	var s = yield [a];

	console.log(s);

	console.log('before');
}

var after = function *(){
	console.log('after');
}

var show = function *(name){
	this.body = 'hello ' + name;
}

function sleep(ms) {
  return function(done){
    setTimeout(done, ms);
  }
}

function *work() {
  yield sleep(5000);
  return 'yay';
}


exports.show = show;
exports.before = before;
exports.after = after;

可能还有问题,待完善,求意见。

5 回复

我这几天也一直在弄这个 看看你的源码 学习一下

利用co实现aop,看起来不错的样子

一般约定大于配置思想,把folder:'./Controllers/'这样的配置项干掉,如果需要定制的才需要写这个参数,会更帅

今天发现了这么个东东,感觉配置路由挺方便 https://github.com/enten/kaio

var kaio = require(‘kaio’); var router = require(‘koa-router’);

kaio() .setRoot(__dirname) .setHost(‘127.0.0.1’) .setPort(3000) .setUri(’/api’) .bind(’/’, BaseController) .bind(’/books’, BookController) .listen();

@SoaringTiger 嗯 ,但是每次有新的路径就需要添加bind ,感觉还是有点麻烦

回到顶部