koa-router
Advanced tools
Comparing version
54
index.js
@@ -12,7 +12,6 @@ /** | ||
var co = require('co'); | ||
var methods = require('methods'); | ||
var Route = require('./route'); | ||
var Resource = require('./resource'); | ||
var parse = require('url').parse; | ||
var methods = require('methods') | ||
, parse = require('url').parse | ||
, Resource = require('./resource') | ||
, Route = require('./route'); | ||
@@ -28,2 +27,6 @@ /** | ||
function Router(app) { | ||
if (!(this instanceof Router)) { | ||
var router = new Router(app); | ||
return router.middleware(); | ||
} | ||
app.router = this; | ||
@@ -37,3 +40,3 @@ this.app = app; | ||
// Expose `router.route` as `app.map` | ||
app.map = router.route; | ||
app.map = this.route; | ||
// Alias methods for `router.route` | ||
@@ -66,5 +69,18 @@ methods.forEach(function(method) { | ||
/** | ||
* Router middleware. Dispatches route callbacks corresponding to the request. | ||
* Expose `Router` | ||
*/ | ||
module.exports = Router; | ||
/** | ||
* Router prototype | ||
*/ | ||
var router = Router.prototype; | ||
/** | ||
* Router middleware factory. Returns router middleware which dispatches route | ||
* callbacks corresponding to the request. | ||
* | ||
* @param {Application} app | ||
* @param {Function} next | ||
* @return {Function} | ||
@@ -74,13 +90,11 @@ * @api public | ||
Router.middleware = function(app) { | ||
// Initialize Router | ||
new Router(app); | ||
// Return middleware | ||
router.middleware = function() { | ||
var router = this; | ||
return function(next) { | ||
return function *() { | ||
// Find matching route | ||
var route = app.router.match(this.req.method, parse(this.req.url).path); | ||
var route = router.match(this.req.method, parse(this.req.url).path); | ||
// Dispatch route callbacks | ||
if (route) { | ||
app.context({ route: route, params: route.params }); | ||
router.app.context({ route: route, params: route.params }); | ||
for (var len = route.callbacks.length, i=0; i<len; i++) { | ||
@@ -101,14 +115,2 @@ yield route.callbacks[i].apply( | ||
/** | ||
* Expose `Router.middleware` | ||
*/ | ||
module.exports = Router.middleware; | ||
/** | ||
* Router prototype | ||
*/ | ||
var router = Router.prototype; | ||
/** | ||
* Match given `method` and `path` and return corresponding route. | ||
@@ -115,0 +117,0 @@ * |
@@ -9,7 +9,5 @@ { | ||
"author": "Alex Mingoia <talk@alexmingoia.com>", | ||
"version": "1.3.3", | ||
"version": "1.4.3", | ||
"keywords": ["koa", "middleware", "router", "route"], | ||
"dependencies": { | ||
"co": "1.5.1", | ||
"koa": "0.0.1", | ||
"lingo": "0.0.5", | ||
@@ -20,2 +18,3 @@ "methods": "0.0.1", | ||
"devDependencies": { | ||
"koa": "0.0.1", | ||
"mocha": "1.12.0", | ||
@@ -22,0 +21,0 @@ "should": "1.2.2", |
@@ -18,3 +18,3 @@ # Router middleware for [koa](https://github.com/koajs/koa) | ||
First, require the middleware and mount it: | ||
Require the router and mount the middleware: | ||
@@ -26,3 +26,5 @@ var koa = require('koa') | ||
app.use(router(app)); | ||
After the router has been initialized, you can register routes or resources: | ||
app.get('/users/:id', function *(id) { | ||
@@ -32,3 +34,11 @@ var user = yield User.findOne(id); | ||
}); | ||
app.resource('forums', require('./controllers/forums')); | ||
You may also instantiate the router separately from mounting the middleware: | ||
var router = new Router(app); | ||
app.use(router.middleware()); | ||
### app.verb(path, callback, [callback...]) | ||
@@ -35,0 +45,0 @@ |
@@ -8,3 +8,3 @@ /** | ||
var request = require('supertest'); | ||
var router = require('..'); | ||
var Router = require('..'); | ||
var should = require('should'); | ||
@@ -16,6 +16,6 @@ var koa = require('koa'); | ||
describe('module', function() { | ||
it('should expose middleware', function(done) { | ||
it('should expose Router', function(done) { | ||
var app = koa(); | ||
should.exist(router); | ||
router.should.be.a('function'); | ||
should.exist(Router); | ||
Router.should.be.a('function'); | ||
done(); | ||
@@ -28,3 +28,15 @@ }); | ||
var app = koa(); | ||
var middleware = router(app); | ||
Router.should.be.a('function'); | ||
var router = new Router(app); | ||
router.should.be.instanceOf(Router); | ||
done(); | ||
}); | ||
it('should expose middleware factory', function(done) { | ||
var app = koa(); | ||
var router = new Router(app); | ||
router.should.have.property('middleware'); | ||
router.middleware.should.be.a('function'); | ||
var middleware = router.middleware(); | ||
should.exist(middleware); | ||
middleware.should.be.a('function'); | ||
@@ -36,3 +48,3 @@ done(); | ||
var app = koa(); | ||
app.use(router(app)); | ||
app.use(Router(app)); | ||
methods.forEach(function(method) { | ||
@@ -68,3 +80,3 @@ app.should.have.property(method); | ||
var app = koa(); | ||
app.use(router(app)); | ||
app.use(Router(app)); | ||
app.use(function(next) { | ||
@@ -99,3 +111,3 @@ return function *() { | ||
var app = koa(); | ||
app.use(router(app)); | ||
app.use(Router(app)); | ||
var route = app.all('/', function *(next) { | ||
@@ -102,0 +114,0 @@ this.status = 204; |
22955
3.13%3
-40%589
2.26%188
5.62%4
33.33%- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed