koa都2了, 更新下 impress-router
发布于 9 年前 作者 magicdawn 5283 次浏览 最后一次编辑是 8 年前 来自 分享

如题, 使用 npm i impress-router[@next](/user/next) 安装支持 koa@next 的 impress-router. 只是API适应 koa@next 变化, 其他并没有什么更改…

--------------------------- 分割线 koa都1了, 发个router, 叫 impress-router

impress-router

意思是 router in express for koa, 取个谐音 从express 的router 部分抄出来的, 目前少 router.param 这个功能

代码测试覆盖率 93%, 有些实在不想写, 也没ignore 掉~ 地址 https://github.com/magicdawn/impress-router

---------------我是分割线----------------------

impress-router

Express style router for koa

Build Status Coverage Status npm version npm downloads

Install

npm i impress-router --save

API

basic

var Router = require('impress-router');
var router = Router();
app.use(router);

new Router(options), or with out new Router(options)

Options

  • goNext: default true, whether go down stream
  • strict,sensitive: these are path-to-regexp options
  • mergeParams: default true, whether merge params when nested router

middleware

use middleware on some path, and you got ctx.path ctx.basePath ctx.originalPath just as Express’s req.baseUrl / req.originalUrl does:

var app = require('koa')();
var router = require('impress-router')();
app.use(router);

router.use('/public',function (next){
  
  // when requesting `/public/js/foo.js`
  this.path; // `/js/foo.js`
  this.basePath; // `/public`
  this.originalPath; // `/public/js/foo.js`

  yield next;
});

Em, use on all request:

var app = require('koa')();
var router = require('impress-router')();
app.use(router);

router.use(function * (next){
  this.user = { name: 'foo', age: 18 };
  yield* next;
})

route

Features

  • GET POST ... methods exposed by methods module are supported
  • all supported, router.all(path,fn)
  • auto OPTIONS response
  • auto HEAD response
var app = require('koa')();
var router = require('impress-router')();
app.use(router);

router.get('/hello',function * (){
  this.body = 'hello';
});

router.all('/hello',function * (){
  this.body = 'hello';
});

params

var app = require('koa')();
var Router = require('impress-router');
var router = Router();
app.use(router);

var userRouter = Router();
router.use('/user/:uid', userRouter);

userRouter.get('/get_:field', function * () {
  this.body = {
    uid: this.params.uid,
    field: this.params.field
  }
});

// GET /user/magicdawn/get_name 
// =>
// { uid: 'magicdawn', field: 'name' }

Why

koa-router is not handy as expected, so …

License

MIT © 2015 Magicdawn http://magicdawn.mit-license.org

6 回复
var router = require('impress-router')();
app.use(router);

这用法是否有点蹩脚?如果把app传进去,会不会更好一点呢?

比如

var router = require('impress-router')(app);

@i5ting

app.use(router) 不是express 的标准做法么~

如果把app传进去,会不会更好一点呢?

把app传进去是为了啥? 省掉 app.use(router) 这一步? 但是router是一个标准的 koa middleware呀, 就是说可以有多个 router, 可以在某一个path上use 一个router

这个问题又回到了这个issue https://github.com/koajs/koa/issues/473 middleware 老实返回 middleware, 不要管别人怎么用你 plugin要求传 app进去, 去extend app/context/request/response

koa-routerapp.use(router(app)) 换成 app.use(router.routes()),我更倾向于后面一种风格

@cfddream

app.use(router) like express does

更新 impress-router@next

回到顶部