标签归档:nuxt

ERROR [nuxt] [request error] [unhandled] [500] fetch failed

ERROR [nuxt] [request error] [unhandled] [500] fetch failed

 ERROR  [nuxt] [request error] [unhandled] [500] fetch failed
  at Object.fetch (node:internal/deps/undici/undici:11118:11)  
  at process.processTicksAndRejections (node:internal/process/task_queues:95:5)  
  at async sendProxy (./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:1157:20)  
  at async ./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:1962:19  
  at async Object.callAsync (./node_modules/.pnpm/unctx@2.3.1/node_modules/unctx/dist/index.mjs:72:16)  
  at async Server.toNodeHandle (./node_modules/.pnpm/h3@1.11.1/node_modules/h3/dist/index.mjs:2249:7)

触发此错误代码

demo.vue

async foo() {
  const resData = await useFetch(`/api/good/1`, {
    method: 'DELETE',
  });
}

nuxt.config.ts

export default defineNuxtConfig({
  nitro: {
    routeRules: {
      "/api/**": {
        proxy: `${env.NUXT_API_URL}api/**`,
      },
  }
}

临时解决方案

把请求方式改为 POST 请求。

async foo() {
  const resData = await useFetch(`/api/good/1`, {
    method: 'POST',
  });
}

网上有说是这些情况:

  1. 代理域名 httphttps 的问题,测试过不是这个问题,和域名无关。
    1. 排查域名请求日志,出现此问题时,请求日志没有记录,说明请求没有到达后端,是前端请求问题。
    2. 尝试改下请求方式,发现 POST 请求正常,DELETE 请求报错,也许是请求方式问题,但是不确定,先临时解决一下。
  2. 降级 h3@1.9.0 版本,降级后,问题依然存在。
  3. 降级 nuxt@3.10.3 版本,降级后,问题依然存在。

参考

  1. 基于nitro的Nuxt3服务端无法请求https,难道是我写错了?
  2. [nuxt] [request error] [unhandled] [500] using proxyRequest or sendProxy · Issue #376 · unjs/h3
  3. Nuxt v3.11.0 proxyRequest in server api routes makes nitro crash if proxy server is down · Issue #26318 · nuxt/nuxt