【问题标题】:Using express middleware in koa在 koa 中使用 express 中间件
【发布时间】:2014-10-12 16:04:16
【问题描述】:

我有实现快速中间件的现有代码。如何在 Koa 应用程序中使用这个中间件?

当我尝试调用 app.use(expressMiddleware) 以在我的 Koa 应用程序中使用中间件时,Koa 抱怨说需要生成器函数:

AssertionError: app.use() requires a generator function

所以我想这里需要某种适配器或技巧......想法?

【问题讨论】:

    标签: node.js express koa


    【解决方案1】:

    koa 与 express 中间件不兼容。 (详细解释请参见this blog post,尤其是“编写更好的中间件”部分)。

    你可以为 koa 重写你的中间件。 koa wiki 有专门的guide 用于编写中间件。

    您将在 express 中间件中收到的 reqres 在 koa 中间件中不直接可用。但是您可以通过this.requestthis.response 访问koa request 和koa response 对象。

    【讨论】:

    • 谢谢 Marco,不过,我希望找到一种方法来解决这个限制......
    【解决方案2】:

    另外,你可以试试koa-connect:https://github.com/vkurchatkin/koa-connect

    看起来很简单:

    var koa = require('koa');
    var c2k = require('koa-connect');
    var app = koa();
    
    function middleware (req, res, next) {
      console.log('connect');
      next();
    }
    
    app.use(c2k(middleware));
    
    app.use(function * () {
      this.body = 'koa';
    });
    
    app.listen(3000);
    

    【讨论】:

    • 有趣的是,koa-connect 是在我最初问这个问题的同一天创建的 :)
    【解决方案3】:

    我在 npm 上为 koa2 创建了 koa2-connect。 https://github.com/cyrilluce/koa2-connect

    npm i koa2-connect -S
    // usage same as koa-connect
    

    因为koa-connect的作者还没有发布下一个版本(npm i koa-connect@next没用),并且不兼容webpack-dev-middleware和webpack-hot-middleware。

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 1970-01-01
      • 2023-01-04
      • 2018-01-23
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      相关资源
      最近更新 更多