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

Nuxt3项目服务端用fetch加载本地文件报错如何解决?

Nuxt3服务端API读取本地JSON文件报错的解决方法

问题场景

在Nuxt3组件中通过$fetch能正常获取静态JSON数据:

export default {
  methods: {
    async getPodcasts() {
      return await $fetch('_nuxt/assets/data/podcasts.json')
    }
  }
}

但在服务端API文件(server/api/podcasts/index.get.js)中使用原生fetch读取同一份文件时,出现500错误:

[nuxt] [request error] [unhandled] [500] Failed to parse URL from _nuxt/assets/data/podcasts.json

原因分析

组件中的$fetch是Nuxt封装的方法,会根据运行环境自动适配路径:客户端发起HTTP请求,服务端则内部处理为正确的资源读取逻辑。而服务端API代码运行在Node.js环境,原生fetch要求传入合法的绝对URL,直接使用相对路径会被判定为无效URL,导致解析失败。

解决方案

方案1:直接读取本地文件(推荐)

利用Node.js的文件系统模块,直接读取项目中的JSON文件:

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

export default defineEventHandler(async () => {
  // 构建文件的绝对路径
  const filePath = path.join(process.cwd(), 'assets/data/podcasts.json')
  // 读取并解析JSON内容
  const rawData = await fs.readFile(filePath, 'utf-8')
  return JSON.parse(rawData)
})

方案2:使用绝对URL发起fetch请求

通过请求头获取当前服务域名,拼接成绝对URL后发起请求:

export default defineEventHandler(async (event) => {
  const baseUrl = `http://${event.node.req.headers.host}`
  const res = await fetch(`${baseUrl}/_nuxt/assets/data/podcasts.json`)
  return res.json()
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:01:12