一个 Koa 应用程序可以使用另一个 Koa 应用程序吗?
Can a Koa Application Use Another Koa Application?
如问题所示,我在使用一个 koa
应用程序作为另一个应用程序的中间件时遇到了问题。使用 express
,我们可以这样做:
const express = require('express');
const expressApp = express();
const otherExpressApp = express();
app.use(otherExpressApp);
同样的模式适用于 connect
。但是,它不适用于 koa
:
const koa = require(`koa`);
const koaApp = koa();
const otherKoaApp = koa();
app.use(otherKoaApp);
给我:
AssertionError: app.use() requires a generator function
at Application.app.use (/home/sean/repos/koaka/node_modules/koa/lib/application.js:100:5)
at repl:1:5
at REPLServer.defaultEval (repl.js:164:27)
at bound (domain.js:250:14)
at REPLServer.runBound [as eval] (domain.js:263:12)
at REPLServer.<anonymous> (repl.js:392:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:210:10)
at REPLServer.Interface._line (readline.js:546:8)
koa
提供了一个函数,可以将其安装为 express
/connect
应用程序:
expressApp.use(koaApp.callback());
但这似乎不适用于 koa
本身:
koaApp.use(otherKoaApp.callback());
投掷:
AssertionError: app.use() requires a generator function
at Application.app.use (/home/sean/repos/koaka/node_modules/koa/lib/application.js:100:5)
at repl:1:7
at REPLServer.defaultEval (repl.js:164:27)
at bound (domain.js:250:14)
at REPLServer.runBound [as eval] (domain.js:263:12)
at REPLServer.<anonymous> (repl.js:392:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:210:10)
at REPLServer.Interface._line (readline.js:546:8)
我可以使用一个 koa
应用程序作为另一个 koa
应用程序的中间件吗? 如果可以,怎么做?如果不是,是否打算将此行为放入将来的版本中?为什么或为什么不?
执行此操作的方法是使用 koa-mount
。
https://github.com/koajs/mount
var koa = require('koa');
var mount = require('koa-mount');
var app1 = koa();
var app2 = koa();
app1.use(mount(app2));
或者将其安装在 URL 子路径下:
app1.use(mount('/api', app2));
koa 与 express 的不同之处在于它有一个非常小的内核。例如,express 附带静态 webserver 中间件,但 koa 没有。您需要导入一个单独的模块来执行 "X" 的事实就是 koa 中的工作方式。但是请注意,koa-mount
仍在旗舰 koajs github 回购下,所以它或多或少是官方的。
如问题所示,我在使用一个 koa
应用程序作为另一个应用程序的中间件时遇到了问题。使用 express
,我们可以这样做:
const express = require('express');
const expressApp = express();
const otherExpressApp = express();
app.use(otherExpressApp);
同样的模式适用于 connect
。但是,它不适用于 koa
:
const koa = require(`koa`);
const koaApp = koa();
const otherKoaApp = koa();
app.use(otherKoaApp);
给我:
AssertionError: app.use() requires a generator function
at Application.app.use (/home/sean/repos/koaka/node_modules/koa/lib/application.js:100:5)
at repl:1:5
at REPLServer.defaultEval (repl.js:164:27)
at bound (domain.js:250:14)
at REPLServer.runBound [as eval] (domain.js:263:12)
at REPLServer.<anonymous> (repl.js:392:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:210:10)
at REPLServer.Interface._line (readline.js:546:8)
koa
提供了一个函数,可以将其安装为 express
/connect
应用程序:
expressApp.use(koaApp.callback());
但这似乎不适用于 koa
本身:
koaApp.use(otherKoaApp.callback());
投掷:
AssertionError: app.use() requires a generator function
at Application.app.use (/home/sean/repos/koaka/node_modules/koa/lib/application.js:100:5)
at repl:1:7
at REPLServer.defaultEval (repl.js:164:27)
at bound (domain.js:250:14)
at REPLServer.runBound [as eval] (domain.js:263:12)
at REPLServer.<anonymous> (repl.js:392:12)
at emitOne (events.js:82:20)
at REPLServer.emit (events.js:169:7)
at REPLServer.Interface._onLine (readline.js:210:10)
at REPLServer.Interface._line (readline.js:546:8)
我可以使用一个 koa
应用程序作为另一个 koa
应用程序的中间件吗? 如果可以,怎么做?如果不是,是否打算将此行为放入将来的版本中?为什么或为什么不?
执行此操作的方法是使用 koa-mount
。
https://github.com/koajs/mount
var koa = require('koa');
var mount = require('koa-mount');
var app1 = koa();
var app2 = koa();
app1.use(mount(app2));
或者将其安装在 URL 子路径下:
app1.use(mount('/api', app2));
koa 与 express 的不同之处在于它有一个非常小的内核。例如,express 附带静态 webserver 中间件,但 koa 没有。您需要导入一个单独的模块来执行 "X" 的事实就是 koa 中的工作方式。但是请注意,koa-mount
仍在旗舰 koajs github 回购下,所以它或多或少是官方的。