You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:25:53