【发布时间】:2014-10-12 16:04:16
【问题描述】:
我有实现快速中间件的现有代码。如何在 Koa 应用程序中使用这个中间件?
当我尝试调用 app.use(expressMiddleware) 以在我的 Koa 应用程序中使用中间件时,Koa 抱怨说需要生成器函数:
AssertionError: app.use() requires a generator function
所以我想这里需要某种适配器或技巧......想法?
【问题讨论】:
我有实现快速中间件的现有代码。如何在 Koa 应用程序中使用这个中间件?
当我尝试调用 app.use(expressMiddleware) 以在我的 Koa 应用程序中使用中间件时,Koa 抱怨说需要生成器函数:
AssertionError: app.use() requires a generator function
所以我想这里需要某种适配器或技巧......想法?
【问题讨论】:
koa 与 express 中间件不兼容。 (详细解释请参见this blog post,尤其是“编写更好的中间件”部分)。
你可以为 koa 重写你的中间件。 koa wiki 有专门的guide 用于编写中间件。
您将在 express 中间件中收到的 req 和 res 在 koa 中间件中不直接可用。但是您可以通过this.request 和this.response 访问koa request 和koa response 对象。
【讨论】:
另外,你可以试试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);
【讨论】:
我在 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。
【讨论】: