Не удается получить данные из api с помощью axios в компонентах Nuxt

#axios #nuxt.js #laravel-api #asyncdata

Вопрос:

 <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.
Затем я понял, что не могу использовать asyncData в компонентах nuxt, и изменил код следующим образом.

 <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'».
Как я могу получить данные через api в компонентах Nuxt?

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

Я прочитал 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: неожиданный токен < в JSON в позиции 0».

Ответ №1:

Этот код сработал.

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

Ответ №2:

Рад, что нашел решение вашей проблемы.

Вы даже можете использовать this.$axios.$get напрямую, если не хотите .data потом писать.