如何通过ExpressJS或Plesk在子路径部署Nuxt应用
问题分析与解决方案
你的修改方案存在几个核心问题:重复监听端口、在路由中重复初始化Nuxt实例、未正确将Nuxt挂载到/blog路径,这些是导致sample.com/blog访问报错的原因。以下是修正后的完整方案:
第一步:修改Nuxt配置文件
首先在nuxt.config.js中添加baseURL配置,确保Nuxt内部的路由、资源路径自动带上/blog前缀:
export default { // 保留原有其他配置 app: { baseURL: '/blog/' } }
第二步:修正server.js代码
重新编写server.js,正确挂载Nuxt到/blog路径,同时处理根路径的静态页面请求:
const express = require('express') const consola = require('consola') const { Nuxt } = require('nuxt') const app = express() const port = process.env.PORT; // 引入Nuxt配置 const config = require('./nuxt.config.js') config.dev = process.env.NODE_ENV !== 'production' async function start() { // 初始化Nuxt实例(仅执行一次) const nuxt = new Nuxt(config) const { host } = nuxt.options.server // 等待Nuxt完成初始化 await nuxt.ready() // 将Nuxt渲染中间件挂载到/blog路径 app.use('/blog', nuxt.render) // 处理根路径,返回指定静态页面 app.get('/', (req, res) => { // 确保home/inxe.html路径正确,__dirname代表当前项目根目录 res.sendFile('home/inxe.html', { root: __dirname }) }) // 仅启动一次Express服务 app.listen(port, host, () => { consola.ready({ message: `Server listening on http://${host}:${port}`, badge: true, }) }) } // 启动服务 start()
关键修改说明
- 避免重复初始化:Nuxt实例仅在启动时初始化一次,不再在路由回调中重复调用
start(),防止重复创建实例、占用端口。 - 正确挂载路径:通过
app.use('/blog', nuxt.render)将Nuxt绑定到/blog前缀,所有/blog开头的请求都会交由Nuxt处理。 - 根路径处理:使用
res.sendFile返回指定静态页面,需确保home/inxe.html的相对路径正确,若为绝对路径可直接填写完整路径。 - 移除重复监听:仅保留一次
app.listen调用,避免端口冲突报错。
额外注意事项
- 生产环境部署前,需确保已执行
nuxt build命令完成Nuxt项目的构建。 - Plesk端无需额外配置,只需确认Node.js应用的启动文件为
server.js,端口与代码中process.env.PORT保持一致即可。
内容的提问来源于stack exchange,提问作者Mohammad Chavoshi
相关产品推荐
相关产品推荐

