首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象不是"require“端的Koa实例。

对象不是"require“端的Koa实例。
EN

Stack Overflow用户
提问于 2018-01-22 11:04:54
回答 1查看 143关注 0票数 3

这是一个奇怪的错误,所以我肯定遗漏了一些明显的东西,但它在这里。

我正在尝试设置一个Koa服务器,根据vhost的名称为几个Koa应用程序提供服务。入口点是server.js

代码语言:javascript
复制
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,一个应用程序的入口点:

代码语言:javascript
复制
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实例,尽管appapp1的日志值是相同的({ subdomainOffset: 2, proxy: false, env: 'development' } )。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 10:33:56

最后,我想找到了问题所在,而且,碰巧的是,我的问题中缺少了基本的信息。

./apps/app1文件夹有自己的node_modules,有自己的Koa副本。因此,server.jsapps/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那里借用了原始行)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48380123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档