Encountered 500 (RuntimeError) error while re-fetching data: problem solution for axios and nuxtjs
P粉327903045
P粉327903045 2023-08-25 11:06:29
0
1
510
<p>I built a blog-based page using WordPress as API and Nuxt.js as JavaScript framework. The problem occurs in my _slug.vue file. When I navigate to an individual blog (project) page, the individual blog posts render fine. However, if I reload a single blog post page, or just enter in the URL, the console shows the error: GET <em>url</em> 500 (RuntimeError). </p> <pre class="brush:php;toolbar:false;"><template> <div class="single-project"> <Header /> <h1>{{project.title.rendered}}</h1> <article v-html="project.content.rendered"></article> <ClickToAction /> </div></pre> <pre class="brush:php;toolbar:false;"><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></pre> <p>以及一个项目的链接:</p> <pre class="brush:php;toolbar:false;"><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}}"></pre> <p>目标在nuxt.config.js中是静态的。</p> <h1><strong>编辑</strong></h1> <p>经过研究,我发现在nuxt-link的params对象中传递的id在重新加载后丢失,因为它需要“父”页面来获取id的值。为了解决这个问题,我通过API使用slug获取了项目,并显示了所有属性(例如标题、内容等)</p> <pre class="brush:php;toolbar:false;">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) { ... }</pre></p>
P粉327903045
P粉327903045

reply all(1)
P粉459578805

asyncData will not be retriggered when refreshing the page or entering the URL directly.
If you want to get data when these events occur, you can use fetch()hook or middleware.


Edited answer

Before continuing, please make sure you have @nuxtjs/axios installed: https://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>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template