You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
巴林闲侠
6f4dcd76d0
|
3 years ago | |
---|---|---|
.. | ||
node_modules | 3 years ago | |
test | 3 years ago | |
.eslintrc | 3 years ago | |
.npmignore | 3 years ago | |
.travis.yml | 3 years ago | |
History.md | 3 years ago | |
LICENSE | 3 years ago | |
README.md | 3 years ago | |
index.js | 3 years ago | |
package.json | 3 years ago |
README.md
koa-66
Router middleware for koa v2.
feedbacks are welcome
Features
- Plugin middleware support
- Express like http verbs methods (including
all
) - Express like use function
- Express like param function
- Automatic OPTIONS response
- Automatic HEAD when GET is present
- 501 and 405 status (throw capability with headers)
- Mount instance on specific path
- Multiple middleware as arguments
- Multiple middleware as array
Installation
# npm install koa-66
Example
const Koa = require('koa');
const Router = require('koa-66');
const app = new Koa();
const router = new Router();
const mainRouter = new Router();
router.param('id', (ctx, next, id) => {
ctx.yolo = id;
return next();
});
router.use(async function(ctx, next) {
ctx.a = " ";
await next();
});
router.get('/:id', (ctx, next) => {
return next().then(() => {
ctx.body += ctx.a + ctx.yolo;
})
});
router.get('/:id', async function(ctx) {
ctx.body = await Promise.resolve('hello');
});
mainRouter.mount('/pouet', router);
app.use(mainRouter.routes());
app.listen(1664);
// GET http://localhost:1664/pouet/world
// => hello world
Example with throw option
const Koa = require('koa');
const Router = require('koa-66');
const app = new Koa();
const router = new Router();
app.use(async function(ctx, next) {
try {
await next();
}catch(e){
if(e.status === 405) {
ctx.status = 405;
ctx.set(e.headers);
}
}
})
router.get('/', (ctx) => ctx.body = 'hello');
app.use(router.routes({throw: true}));
app.listen(1664);
// > curl http://localhost:1664/ -I -X POST
//
// HTTP/1.1 405 Method Not Allowed
// allow: HEAD, GET
// Content-Type: text/plain; charset=utf-8
// Content-Length: 18
// Date: Wed, 04 Nov 2015 10:29:06 GMT
// Connection: keep-alive
Plugin support
I don't know if Plugin is a good term for this feature. The goal was to add cappability to register some middleware on a main Router that will be inject via config object on different route. (ex: authentication or acl behaviour). Why? Because I am lazy to require some middleware in all my router script with generaly relatif path...
So I decided to add the possibility to inject an object at first parameter (that will be a config object) and adding an extra middleware that will be inject in middleware stack. To register this plugin just use a plugin()
method.
I will probably pass options on ctx.state object on next version
const Router = require('koa-66');
const main = new Router();
// you can use multiple middleware as arguments or array
main.plugin('authent', (ctx, next, options) => {
// do stuff inject user on context for example
return next();
//or throw or do nothing that will stop execution of router stack
})
main.plugin('acl', (ctx, next, options) => {
// do stuff check role via options object for example
return next();
//or throw or do nothing that will stop execution of router stack
})
const router = new Router();
router.use({authent: true});
//options here is a boolean,
//but you can pass everything you want,
//and it will be inject as options
router.get('/private', {acl:['admin']},
ctx => ctx.body = 'private'
)
main.mount('/api', router);
...
// order of call /api/private
// 1 plugin authent
// 2 plugin acl
// 3 real middleware
Test
# npm test