我正在尝试使用 expressjs 及其 vhost 功能运行 2 个或更多 nuxt 应用程序。我的目标是在一个端口中运行分配给不同域的多个nuxt应用程序。
这是我尝试过的。
- 我设置了 2 个 nuxt 示例应用程序
- 我设置了 expressjs 并将 vhost 模块添加到包中.json
-
这是 server 的内容.js用于 expressjs
var vhost = require("express"); var vhost = require("vhost"); var app = (module.exports = express()); var app_one = require("./app_one/server/index.js"); var app_two = require("./app_two/server/index.js"); app .use(vhost("appone.com", app_one.start_app_one)) .use(vhost("apptwo.com", app_two.start_app_two)) .listen(3000);
-
然后我在两个应用程序的服务器目录下添加了 index.js。
应用一
const express = require("express");
const consola = require("consola");
const {
Nuxt,
Builder
} = require("nuxt");
const app = express();
// Import and Set Nuxt.js options
const config = require("../nuxt.config.js");
config.dev = process.env.NODE_ENV !== "production";
async function start() {
// Init Nuxt.js
const nuxt = new Nuxt(config);
const {
host,
port
} = nuxt.options.server;
// Build only in dev mode
await nuxt.ready();
// Give nuxt middleware to express
app.use(nuxt.render);
// Listen the server
app.listen(port, host);
consola.ready({
message: `Server listening on http://${host}:${port}`,
badge: true
});
}
exports.start_app_one = function () {
start();
};
应用二
const express = require("express");
const consola = require("consola");
const {
Nuxt,
Builder
} = require("nuxt");
const app = express();
// Import and Set Nuxt.js options
const config = require("../nuxt.config.js");
config.dev = process.env.NODE_ENV !== "production";
async function start() {
// Init Nuxt.js
const nuxt = new Nuxt(config);
const {
host,
port
} = nuxt.options.server;
await nuxt.ready();
// Give nuxt middleware to express
app.use(nuxt.render);
// Listen the server
app.listen(port, host);
consola.ready({
message: `Server listening on http://${host}:${port}`,
badge: true
});
}
exports.start_app_two = function () {
start();
};
然后我跑node server.js
.当我尝试访问appone.com:3000
时,它只显示nuxt加载网页并停在那里。控制台内没有错误或没有消息。我被困在这一点上,有人可以帮助我吗?
所以我让它工作了。这是我是如何做到的。
- 设置 2 个 NUXT 示例应用
- 我设置了 expressjs 并将 vhost 模块添加到包中.json
这是 server 的内容.js用于 expressjs
const express = require('express')
var vhost = require('vhost')
const app = express()
const port = 3000
const appone = require('./app_one/server/index.js')
const apptwo = require('./app_two/server/index.js')
// app.get('/', (req, res) => res.send('Hello dear world, this is the host app to show vhost capabilities!'))
app
.use(vhost('appone.com', appone))
.use(vhost('apptwo.com', apptwo))
.listen(3000);
// app.listen(port, () => console.log(`Example app listening on port ${port}!`))
使用以下命令使用 expressjs 服务器创建了 2 个 nuxt
npx create-nuxt-app <project-name>
编辑了服务器/索引.js两个应用程序中的文件删除了 app.listen 部分,因为我们已经在使用 expressjs 服务器.js 文件侦听所需的端口和主机。
这是来自两个应用程序的索引.js文件。
const express = require("express");
const consola = require("consola");
const { Nuxt, Builder } = require("nuxt");
const app = express();
// Import and Set Nuxt.js options
const config = require("../nuxt.config.js");
config.dev = process.env.NODE_ENV !== "production";
async function start() {
// Init Nuxt.js
const nuxt = new Nuxt(config);
const { host, port } = nuxt.options.server;
// Build only in dev mode
if (config.dev) {
const builder = new Builder(nuxt);
await builder.build();
} else {
await nuxt.ready();
}
// Give nuxt middleware to express
app.use(nuxt.render);
// Listen the server
// port = 3005
// app.listen(port, host)
// consola.ready({
// message: `Server listening on http://${host}:${port}`,
// badge: true
// })
}
start();
module.exports = app;
现在我转到每个特定于应用程序的文件夹,然后运行以下命令来构建文件
npm run build
- 一旦两个应用程序都完成了此操作。我添加了更改了应用程序的package.json文件,并设置了expressjs vhost。
我包含了我的子应用程序所需的模块,因为出于某种原因,如果没有这些模块,它将无法工作。
{
"name": "webclient_test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.19.0",
"express": "^4.17.1",
"node-fetch": "^2.6.0",
"nuxt": "^2.10.2",
"vhost": "^3.0.2",
"vue-meta": "^2.3.1"
}
}
- 然后我更改了两个子应用程序中的nuxt.config.js文件以包含构建目录。我需要将构建目录更改为 expressjs vhost 设置应用程序中的相对路径。所以我添加了这个配置选项作为两个子应用程序的配置文件中的最后一项。
对于第一个应用
buildDir: "app_one/.nuxt"
对于第二个应用。
buildDir: "app_two/.nuxt"
- 在此之后,我运行了
node server.js
,两个应用程序都可以从各自的域访问,即appone.com:3000
和apptwo.com:3000
没有任何问题