重新获取数据时遇到500(RuntimeError)错误:axios和nuxtjs的问题解决方案
P粉327903045
P粉327903045 2023-08-25 11:06:29
[Vue.js讨论组]

我使用WordPress作为API和Nuxt.js作为JavaScript框架构建了一个基于博客的页面。 问题出现在我的_slug.vue文件中。当我导航到一个单独的博客(项目)页面时,单个博客文章会正常渲染。但是,如果我重新加载单个博客文章页面,或者只是在URL中输入,控制台会显示错误:GET url 500(RuntimeError)。

<template> 
<div class="single-project">
    <Header />
    <h1>{{project.title.rendered}}</h1>
    <article v-html="project.content.rendered"></article>
    <ClickToAction />
</div>
<script>
/* eslint-disable */
import axios from 'axios'
export default{
    data() {
        return {
            project: {}
        }
    },
    async asyncData({params}){

            return await axios.get('https://my-api.wp/wp-json/wp/v2/project/' + params.id)
                .then((res) => {
                    return {
                        project: res.data
                    }
                }).catch(function (error) {
                    if (error.response) {
                    // Request made and server responded
                    console.log(error.response.data);
                    console.log(error.response.status);
                    console.log(error.response.headers);
                    } else if (error.request) {
                    // The request was made but no response was received
                    console.log(error.request);
                    } else {
                    // Something happened in setting up the request that triggered an Error
                    console.log('Error', error.message);
                    }
                });
    }
}
</script>

以及一个项目的链接:

<nuxt-link :class="'item ' + project._embedded['wp:term'][0].map(el => el.name.toLowerCase()).join(' ')" v-for="project in projects"  :key="project.id" :to="{name: 'projekte-slug', params: { slug: project.slug, id: project.id}}">

目标在nuxt.config.js中是静态的。

编辑

经过研究,我发现在nuxt-link的params对象中传递的id在重新加载后丢失,因为它需要“父”页面来获取id的值。为了解决这个问题,我通过API使用slug获取了项目,并显示了所有属性(例如标题、内容等)

async asyncData({ params, $axios }) {
        try {
            console.log(params.slug);
            const project = await $axios.$get(`https://my-api.wp/wp-json/wp/v2/project?slug=${params.slug}&_embed`)
            return { project }
        } catch (error) {
...
}

P粉327903045
P粉327903045

全部回复(1)
P粉459578805

asyncData在刷新页面或直接输入URL时不会重新触发。
如果您想在这些事件发生时获取数据,可以使用fetch()钩子中间件


编辑后的答案

在继续之前,请确保您已安装@nuxtjs/axioshttps://axios.nuxtjs.org/setup

<script>
export default {
  async asyncData({ params, $axios }) {
    try {
      const project = await $axios.$get(`https://my-api.wp/wp-json/wp/v2/project/${params.id}`)
      return { project }
    } catch (error) {
      if (error.response) {
        // Request made and server responded
        console.log(error.response.data)
        console.log(error.response.status)
        console.log(error.response.headers)
      } else if (error.request) {
        // The request was made but no response was received
        console.log(error.request)
      } else {
        // Something happened in setting up the request that triggered an Error
        console.log('Error', error.message)
      }
    }
  },
}
</script>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号