Menghadapi ralat 500 (RuntimeError) semasa mengambil semula data: penyelesaian masalah untuk axios dan nuxtjs
P粉327903045
2023-08-25 11:06:29
<p>Saya membina halaman berasaskan blog menggunakan WordPress sebagai API dan Nuxt.js sebagai rangka kerja JavaScript.
Masalah berlaku dalam fail _slug.vue saya. Apabila saya menavigasi ke halaman blog (projek) individu, catatan blog individu menjadi baik. Walau bagaimanapun, jika saya memuat semula satu halaman catatan blog, atau hanya memasukkan dalam URL, konsol menunjukkan ralat: GET <em>url</em> </p>
<pre class="brush:php;toolbar:false;"><template>
<kelas div="projek tunggal">
<Pengepala />
<h1>{{project.title.rendered}}</h1>
<artikel v-html="project.content.rendered"></article>
<ClickToAction />
</div></pra>
<pre class="brush:php;toolbar:false;"><script>
/* eslint-disable */
import axios daripada 'axios'
eksport lalai{
data() {
kembali {
projek: {}
}
},
async asyncData({params}){
kembali menanti axios.get('https://my-api.wp/wp-json/wp/v2/project/' + params.id)
.then((res) => {
kembali {
projek: res.data
}
}).tangkap(fungsi (ralat) {
jika (error.response) {
// Permintaan dibuat dan pelayan membalas
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// Permintaan telah dibuat tetapi tiada jawapan diterima
console.log(error.request);
} lain {
// Sesuatu telah berlaku dalam menyediakan permintaan yang mencetuskan Ralat
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="projek dalam projek" :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在重新加载后丢失,因为它“需象要值。为了解决这个问题,我通过API使用slug获取了项目,并显示了所有属性(例如标题、内容等)</p>
<pre class="brush:php;toolbar:false;">async asyncData({ params, $axios }) {
cuba {
console.log(params.slug);
projek const = menanti $axios.$get(`https://my-api.wp/wp-json/wp/v2/project?slug=${params.slug}&_embed`)
pulangkan { projek }
} tangkap (ralat) {
...
}</pre></p>
asyncData
Tidak akan dicetuskan semula apabila memuat semula halaman atau memasukkan URL secara terus.Jika anda ingin mendapatkan data apabila peristiwa ini berlaku, anda boleh menggunakan
fetch()
cangkuk atau middleware.Jawapan yang diedit
Sebelum meneruskan, sila pastikan anda telah memasang
@nuxtjs/axios
: https://axios.nuxtjs.org/setup