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

如何在Vercel托管的Nuxt3 API中用Node.js path/fs模块访问文件系统

在Vercel托管的Nuxt3 API中访问Public目录文件的解决方案

核心原因

Nuxt3在构建阶段会将src/public目录下的资源复制到构建输出目录.output/public中,而Vercel部署的是构建后的产物,直接通过项目源码路径(比如src/public)访问会找不到文件,必须基于构建后的输出路径来定位。

解决方案步骤

1. 获取正确的文件路径

在Nuxt3的API路由中,通过process.cwd()结合构建后的public目录路径来定位资源。构建后的public目录位于.output/public,完整路径可通过path.join(process.cwd(), '.output/public')拼接。

2. 示例代码(API路由)

在server/api/file-ops.ts(或.js)中编写如下代码:

import fs from 'fs/promises'
import path from 'path'

export default defineEventHandler(async () => {
  // 构建后的public目录绝对路径
  const publicDir = path.join(process.cwd(), '.output/public')
  
  try {
    // 遍历public目录下的文件
    const files = await fs.readdir(publicDir)
    // 读取某个具体文件示例
    const targetFile = path.join(publicDir, 'demo.txt')
    const fileContent = await fs.readFile(targetFile, 'utf-8')
    
    return {
      availableFiles: files,
      demoContent: fileContent
    }
  } catch (error) {
    return {
      error: '无法访问public目录或文件',
      details: error.message
    }
  }
})

3. 注意事项

  • 若在nuxt.config.ts中自定义了构建输出目录,需对应调整路径拼接规则。
  • Vercel部署时会自动执行Nuxt构建命令,无需手动复制public目录资源,只需确保代码使用构建后的路径。
  • 动态生成的文件建议放在server/public目录,assets目录资源会被编译处理,不适合直接通过fs访问。

本地验证方法

先执行npm run build生成构建产物,查看.output/public目录是否包含目标资源,再通过node .output/server/index.mjs启动服务测试API,确认正常访问后再部署到Vercel。

内容的提问来源于stack exchange,提问作者krypton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:39:53