这是一个奇怪的错误,所以我肯定遗漏了一些明显的东西,但它在这里。
我正在尝试设置一个Koa服务器,根据vhost的名称为几个Koa应用程序提供服务。入口点是server.js:
const _ = require("lodash");
const compose = require("koa-compose");
const Koa = require("koa");
const server = module.exports = new Koa();
const app1 = require("./apps/app1");
const app2 = require("./apps/app2");
console.log(app1 instanceof Koa); // false (!)
console.log(app1); // `{ subdomainOffset: 2, proxy: false, env: 'development' }`
const vhostApps = [
{ vhost: "localhost", app: composer(app1) }, // composer fails because app1 is not a Koa instance
{ vhost: "app1.mydomain.com", app: composer(app1) },
{ vhost: "app2.mydomain.com", app: composer(app2) }
];
server.use(async function(ctx, next) {
const app = _(vhostApps).find({ vhost: ctx.hostname }).app;
return await app ? app.apply(this, [ctx, next]) : next();
});
if (!module.parent) server.listen(process.env.PORT || 80);
function composer(app) {
const middleware = app instanceof Koa ? app.middleware : app;
return compose(middleware);
}然后是./apps/app1/index.js,一个应用程序的入口点:
const Koa = require("koa");
const serve = require("koa-static");
const views = require("koa-views");
const router = require("./routes");
const app = new Koa();
app.use(serve(__dirname + "/assets"));
app.use(views(__dirname + "/views", { map: { html: "lodash" } }));
app.use(router.routes());
console.log(app instanceof Koa); // true (OK)
console.log(app); // `{ subdomainOffset: 2, proxy: false, env: 'development' }`
module.exports = app;在这个模块中,app是Koa的一个实例(因此它具有一个类型数组的middleware属性)。
但是从server.js中可以看出,从app1导入的值是而不是预期的Koa实例,尽管app和app1的日志值是相同的({ subdomainOffset: 2, proxy: false, env: 'development' } )。
我做错了什么?
发布于 2018-01-24 10:33:56
最后,我想找到了问题所在,而且,碰巧的是,我的问题中缺少了基本的信息。
./apps/app1文件夹有自己的node_modules,有自己的Koa副本。因此,server.js和apps/app1/index.js各有各的,不同的,Koa。
因此,我想,在行:const middleware = app instanceof Koa ? app.middleware : app;中,app instanceof Koa总是会因为这个原因返回false。
一个解决方案就是从应用程序的node_modules中删除Koa,这样Koa就可以从外部文件夹继承。(乍一看,它对我来说有一些缺点,因为我希望这些应用程序是独立的)。
但是我想我会跳过instanceof Koa测试,转而使用const middleware = app.middleware; (我从https://github.com/koajs/examples/blob/master/vhost/app.js#L14那里借用了原始行)。
https://stackoverflow.com/questions/48380123
复制相似问题