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

使用axios在Nuxt.js中重取数据出现Error 500 (RuntimeError)如何解决?

Nuxt静态站点单文章页刷新报错解决方案

问题根因

  • 你配置的Nuxt路由是/projekte/:slug格式,只有slug是URL自带的永久参数,通过nuxt-link传递的id属于前端路由临时内存参数,页面刷新后会直接丢失,导致请求API时拼接的地址是https://my-api.wp/wp-json/wp/v2/project/undefined,触发500错误。
  • 跳转时正常是因为前端路由切换没有刷新页面,临时传递的id还保留在内存中,可正常读取。

修复方案

你调研得出的用slug查询API的方案是最优解,同时需要补充两个适配细节:

1. 适配WordPress API的返回格式

WordPress REST API 按slug查询文章时,返回的是数组格式(即使只有一个匹配结果),需要取数组第一个元素作为最终的project数据,同时要添加404异常处理逻辑。
修正后的asyncData代码:

async asyncData({ params, $axios, error }) {
  try {
    const projectRes = await $axios.$get(`https://my-api.wp/wp-json/wp/v2/project?slug=${params.slug}&_embed`)
    // 无匹配结果时抛出404
    if (projectRes.length === 0) {
      return error({ statusCode: 404, message: '当前项目不存在' })
    }
    return { project: projectRes[0] }
  } catch (error) {
    // 请求失败处理
    return error({ statusCode: 500, message: '项目数据获取失败' })
  }
}

2. 模板添加空值判断

避免数据未加载完成、或请求失败时,模板读取属性报错,修改模板如下:

<template> 
<div class="single-project">
    <Header />
    <h1 v-if="project">{{ project?.title?.rendered }}</h1>
    <article v-if="project" v-html="project?.content?.rendered"></article>
    <ClickToAction />
</div>
</template>

替代方案(可选)

如果你不想修改API请求逻辑,也可以调整路由规则,把id放到URL中永久保留,比如将路由命名为projekte/:id-:slug,这样刷新时id也不会丢失,请求逻辑可以保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:57:03