使用 '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);
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);