无法在 Nuxt 组件中使用 axios 从 api 获取数据

Posted

技术标签:

【中文标题】无法在 Nuxt 组件中使用 axios 从 api 获取数据【英文标题】:Can't get data from api with axios in Nuxt components 【发布时间】:2021-12-15 02:53:48 【问题描述】:
<template>
  <div id="post">
    <p> data </p>
  </div>
</template>

<script>
export default 
  data () 
    return 
      data: ''
    
  ,
  async asyncData($axios) 
    const res = await $axios.get('/v1/posts')
    .catch( error => 
      console.log("response error", error)
      return false
    )
    return 
      data: res
    
  ,

</script>

一开始,我尝试使用上面的代码获取数据,它在 pages/post.vue 中有效,但在 components/post.vue 中无效。 然后,我意识到我不能在nuxt组件中使用asyncData并更改代码如下。

<template>
  <div id="post">
    <p> data </p>
  </div>
</template>

<script>
export default 
  data () 
    return 
      data: ''
    
  ,
  mounted () 
    this.asyncData()
  ,
  asyncData() 
    await axios.get('/v1/posts')
    .then(res => 
      this.data = res.data
    )
  ,

</script>

然后,我收到一个语法错误“意外的保留字 'await'”。 Nuxt组件中如何通过api获取数据?

====================================

我阅读了https://nuxtjs.org/docs/features/data-fetching#accessing-the-fetch-state 并将代码更改如下。

<script>
export default 
  data () 
    return 
      data: ''
    
  ,
  async fetch() 
    this.data = await fetch('/v1/posts')
    .then(res => res.json())
  ,

</script>

现在,我遇到了另一个错误“fetch() 中的错误:SyntaxError: Unexpected token

【问题讨论】:

【参考方案1】:

此代码有效。

<script>
export default 
  data () 
    return 
      data: '',
    
  ,
  async fetch() 
    const res = await this.$axios.get('/v1/posts')
    this.data = res.data
  ,

</script>

【讨论】:

【参考方案2】:

很高兴找到解决您问题的方法。

如果你不想事后写.data,你甚至可以直接使用this.$axios.$get

【讨论】:

以上是关于无法在 Nuxt 组件中使用 axios 从 api 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在(子)组件上使用 Axios 调用 API 并将结果呈现在 Nuxt 中的 Page(父)组件上?

NUXT.js 和 Axios 运行时如何避免代码重复?

Tabulator + Nuxt.js:如何在回调中使用 axios?

带有 Axios 的 Nuxt 在页面加载时不会从 API 获取数据

Nuxt/TypeScript:无法访问 - TS2339:类型上不存在属性“XXX”

在 Nuxt asyncData 中使用 axios 在浏览器刷新时丢失令牌