Axios ПОЛУЧАЕТ данные, не включающие параметры в шаблон Nuxt

#api #axios #nuxt.js

#API #аксиос #nuxt.js #axios

Вопрос:

Я хочу передать идентификатор в axios, чтобы я мог динамически переключать URL.

Мой запрос axios в моем шаблоне выглядит следующим образом:

 async asyncData({ params }) {
    const { data } = await axios.get('http://localhost:8000/api/', {
      params: {
        id: 1
      }
    })
    return { data }
  }
  

Запрос, передаваемый моему api, является:

 GET /api/?id=1
  

но мне нужно

 GET /api/1
  

Что здесь происходит?

Ответ №1:

Похоже, что функция asyncData вызывается один раз при загрузке страницы. Я все еще не понимаю, почему он не принимает параметры, описанные в документах и многочисленных руководствах, но это не обновило бы страницу, потому что она больше никогда не вызывается.

Чтобы обновить данные страницы с помощью нового вызова api, вам необходимо вернуть обещание axios из части «Методы» экспорта. Приведенный ниже код сначала выполняет запрос axios get, затем добавляет или вычитает 1 из идентификатора с функциями plus и minus.

 <script>
import axios from 'axios'

export default {
  head() {
    return {
      title: 'Weather'
    }
  },
  data: function() {
    return { counter: 1 }
  },
  methods: {
    plus: function(counter, data, datalength) {
      this.counter  = 1
      axios.get('http://localhost:8000/api/'   this.counter).then(res => {
        console.log(this.counter)
        console.log(res.data)
        return (this.data = res.data)
      })
    },
    minus: function(counter, data) {
      if (this.counter >= 2) {
        this.counter -= 1
        axios.get('http://localhost:8000/api/'   this.counter).then(res => {
          console.log(this.counter)
          console.log(res.data)
          return (this.data = res.data)
        })
      } else {
        this.counter = 1
      }
    }
  },
  async asyncData({ params, counter }) {
    let { data } = await axios.get('http://localhost:8000/api/1')
    return { data }
  }
}
</script>
  

Если кто-нибудь хочет разработать или опубликовать лучшее решение, пожалуйста, продолжайте — но я публикую это, потому что я искал так много руководств, и ничего не получалось, пока я не нашел способ интерпретировать документацию, который, безусловно, не подходит для начинающих.