使用 'koa-router'、app.use(router(app)) 会抛出 "requires a generator function" 错误消息

Using 'koa-router', app.use(router(app)) throws a "requires a generator function" error msg

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

app.use(router(app));

引发此错误:

AssertionError: app.use() requires a generator function

很多示例代码都说要以这种方式设置 koa-router。据推测,它向 koa 应用程序添加了方法。

它不会工作,因为 app 是一个对象。尝试像这样设置您的路由器:

var app = require('koa')();
var Router = require('koa-router');
var pub = new Router();
app.use(pub.routes());

希望这能让你清醒:)

首先,改变你的:

var router = require('koa-router');

var router = require('koa-router')();

之后,插入一些路由器规则,例如:

router.get('/', function *(next) {
  this.status = 200;
  this.body = {"Welcome":"Hello"};
});

最后写下:app.use(router.routes()); - 这条线是这里的关键因素......你已经准备好了。

koa-router 包在几个月前发生了变化,并删除了扩展应用程序对象的功能,正如您在上面编写的代码...它曾经以这种方式工作,但这是一个重大变化:

http://github.com/alexmingoia/koa-router/issues/120.

以下是您现在如何设置路由的示例:

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

// below line doesn't work anymore because of a breaking change
// app.use(router(app));

var api = router();

api.get('/', function *(){
    this.body = 'response here';
});

app
  .use(api.routes())
  .use(api.allowedMethods());

app.listen(3000);