将另一个网站添加为 serverMiddleware 的 Nuxt 模块

Posted

技术标签:

【中文标题】将另一个网站添加为 serverMiddleware 的 Nuxt 模块【英文标题】:Nuxt module that adds another website as serverMiddleware 【发布时间】:2019-07-04 04:15:55 【问题描述】:

想法

首先你有一个像其他网站一样的主要 Nuxt 网站。然后将我的模块添加到您的项目中。然后,我的模块将一个子域“admin.example.com”添加到您的项目中,这是一个完全充实的基于 Nuxt 的网站,它完全独立,但从您的项目流程中运行,因此不必制作两个必须单独启动的网站项目想法是我可以制作一个网站项目,然后制作一个添加另一个网站的模块项目,将三个项目变成两个。

代码

模块.js

this.addServerMiddleware(vhost('admin.website.com', adminApp));

adminApp.js

const Nuxt, Builder = require('nuxt');

const config = require('../admin/nuxt.config');
config.dev = true;

const nuxt = new Nuxt(config);

if (nuxt.options.dev) 
  new Builder(nuxt).build()
    .catch(function(error) 
      console.log(error);
    )


module.exports = nuxt.render;

来自管理网站的部分 nuxt.config.js

// __dirname leads to my modules directory
// process.cwd() leads to the main websites folder
module.exports = 
  mode: 'universal',
  srcDir: __dirname,
  rootDir: __dirname,
  modulesDir: process.cwd(),

问题

每当我访问“admin.website.com”时,都会显示以下消息:

我已经尝试了大量的各种更改和调整,但似乎没有任何效果。据我所知,这可能与以下事实有关:A)网站建在某个地方,它没有找到生成的资源文件,或者 B)我没有向意大利面条怪物祈祷。

我已尝试将 adminApp 导出为使用 app.use(nuxt.render) 的 Express 应用程序,但这会导致相同的错误,因此我确定这不是问题所在。我已经尝试为api.website.com 使用 Express 应用程序,效果很好,所以我知道我喜欢这样 |--|接近使这一切工作。像这样添加子域确实有效,每个子域都可以是一个 Express 应用程序,但由于某种原因,Nuxt 在以这种方式使用时找不到任何资源。根据https://nuxtjs.org/api/nuxt-render/ nuxt.render(req, res) 如您所见,将reqres 作为参数,这意味着我不需要通过Express 应用程序使用它,serverMiddleware 已经是一个Express 应用程序。

想法?

【问题讨论】:

现在我在管理站点上使用nuxt generate,并通过简单地使用res.sendFile(path.join(__dirname + '/../admin/dist' + req.path + '/index.html')); 使用常规的Express 应用程序提供它,如果有人想要解决方法的提示,只需将它放在那里,我仍然想解决这个问题,而无需构建网站并提供静态网站。 实际上使用app.use(express.static(path.join(__dirname + '/../admin/dist'))); 作为解决方法更容易。不过还是不开心。 【参考方案1】:

我之前在通过无服务器服务应用程序时遇到了这个错误。我认为您需要在 nuxt.config.js 中为这两个应用程序显式设置 publicPath 或 buildDir 才能使设置工作。您的问题可能是所有构建资产都在同一个文件夹中生成,导致其中一个应用程序找不到构建资产。 buildDir 属性在 nuxt.config.js 上设置,publicPath 设置在 build 属性上定义。

更多信息在这里:

https://nuxtjs.org/api/configuration-builddir

https://nuxtjs.org/api/configuration-build#publicpath

【讨论】:

不幸的是,这两个属性都没有改变。经过一番挖掘,publicPath 仅适用于spa 版本,问题是我无法让universal 工作,因此publicPath 不适用。而buildDir 我之前尝试过,但它也没有改变任何东西,也不应该改变,因为模块网站是在它自己的.nuxt 目录中的网站目录中构建的,所有buildDir 完成的都是一个更改的文件夹名称。我可以补充一下,主网站工作得很好,只有模块子域网站找不到它的资源。

以上是关于将另一个网站添加为 serverMiddleware 的 Nuxt 模块的主要内容,如果未能解决你的问题,请参考以下文章

将另一个类的视图添加为 presentViewController 会导致 UIEvents 不起作用

错误 ServerMiddleware 应该公开一个句柄 nuxt

如何将另一个密钥添加到 vigenere 密码中

将另一个表中的值添加到我的结果集中(例如,查找 user_id 的用户名)

Nuxt serverMiddleware 从 API 获取 json

将另一个项目的设置添加到 app.config