【问题标题】:Using 'koa-router', app.use(router(app)) throws a "requires a generator function" error msg使用 'koa-router',app.use(router(app)) 会抛出“需要生成器函数”错误消息
【发布时间】:2015-09-28 18:26:39
【问题描述】:
var app = require('koa')();
var router = require('koa-router');

app.use(router(app));

抛出此错误:

AssertionError: app.use() 需要生成器函数

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

【问题讨论】:

  • koa-router 包在几个月前发生了变化,并删除了扩展应用程序对象的功能,正如您在上面编码的那样......它曾经以这种方式工作,但这是一个突破性的变化github.com/alexmingoia/koa-router/issues/120.
  • @詹姆斯哇。尝试学习时可能会如此混乱。您能否将您的评论发布为答案,以便我将其标记为已回答。您还可以添加我应该使用的代码语法吗?

标签: javascript koa


【解决方案1】:

几个月前,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);

【讨论】:

  • 感谢您在 YouTube 上提供的精彩 koa 学习视频! link
  • 请注意,如果您使用上面的代码,较新版本的 koa-router 将出现与 OP 完全相同的问题。这是因为 koa-router 已经迁移到 koa2。使用较旧的 koa-router 可能会解决此问题。见github.com/alexmingoia/koa-router/issues/207
【解决方案2】:

首先,改变你的:

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()); - 这行是这里的一个关键因素......你已经准备好了。

【讨论】:

    【解决方案3】:

    它不起作用,因为app 是一个对象。尝试设置您的路由器,如下所示:

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

    希望这能让你明白:)

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2017-03-16
      • 2021-06-29
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      相关资源
      最近更新 更多