Выборка из rest api vue

#vue.js #async-await #fetch #undefined

#vue.js #асинхронный -ожидание #выборка #не определено

Вопрос:

Я, наверное, немного глупый 🙂 Но я скопировал пару сотен решений noee и перепробовал все, что мог придумать (я совершенно новичок в VUE и JS, поэтому, пожалуйста, будьте добры :))

Это твой код, который у меня есть прямо сейчас. Я вижу, что он извлекает данные в F12, но я не могу получить данные в переменную, которую я могу использовать вне своей функции.

Я хочу сделать что-то вроде reponseDataToSession.user.name и так далее по моим данным или перебираю некоторые данные, но если я утешусь.войдите вне моей выборки, я получаю пусто или ничего.

Пожалуйста, помогите мне заставить мой код работать, потратив весь день на эту маленькую штуковину.

Ошибка, которую я получаю: ReferenceError: reponseDataToSession не определен

Итак, вот код.

  <template>
    <div id="app">
        <input
                v-model="sessionUUID"
                @keyup.enter="fetchsessions()"
                name="search"
                type="text"
        />

        <input
                @mouseup="fetchsessions()"
                name="serchSubmit"
                value="SÖK"
                type="submit"
        />

        <template v-if="viewData">
            {{responseDataToSession}}
        </template>
    </div>
</template>


<script>
import base64 from "base-64";

export default {
  name: "App",
  data() {
    return {
      sessionUUID: "",
        responseDataToSession: {},
      viewData: false,
    };
  },
  methods: {
    fetchsessions: function () {
      const url = "http://localhost:8080/gethistory";
      const method = "POST"
      const username = "user";
      const password = "bass";
      const body = JSON.stringify({"uuid": "'   this.sessionUUID   '","answers": []});       
      const headers = new Headers();

      headers.append("Content-Type", "application/json");
      headers.append("Authorization", "Basic "   base64.encode(username   ":"   password));
      
      this.responseDataToSession = fetching();
      console.log("1" this.reponseDataToSession)
      this.viewData = true

      async function fetching() {
        return this.responseDataToSession = await fetch(url, { method, headers, body });
      }

    }
  }
};
</script>

  
  

Комментарии:

1. console.log(reponseDataToSession.sessionSteeps) должно быть console.log(this.reponseDataToSession.sessionSteeps)

2. Несвязанный: reponseDataToSession неправильно инициализирован в data()

3. Измените консоль. войти, и теперь я получаю неперехваченный (в обещании) Ошибка ссылки: ответ не определен. И о просьбах инициализации скажите мне, как это сделать вместо этого, как я уже сказал, я новичок во всем этом.

Ответ №1:

У вас есть ReferenceError: response is not defined , потому что вы должны объявить свой переменный ответ раньше. Итак, вы должны написать :

 async function fetching() {
        const  response = await fetch(url, { method, headers, body });
        return response
      }
  

или, может быть, напрямую (если ваша переменная «response» предназначена только для вашей функции, она вам не нужна)

 async function fetching() {
        return await fetch(url, { method, headers, body });
      }
  

Для responseDataToSession этого попробуйте с responseDataToSession: {} ,

Комментарии:

1. Немного обновлен код. Теперь я получаю в консоли неопределенный. И если я в своем html запишу это, как указано выше, я получу [обещание объекта] Есть идеи?

2. Вы пробовали this.responseDataToSession = await fetch(url, { method, headers, body }); и const body = JSON.stringify({"uuid": "' this.sessionUUID '","answers": []}}; ??

3. Нет, в вашем коде замените const body = '{"uuid": "' this.sessionUUID '","answers": []}'; на const body = JSON.stringify({"uuid": "' this.sessionUUID '","answers": []}}; , а затем замените this.responseDataToSession = fetching(); на this.responseDataToSession = await fetch(url, { method, headers, body });

4. Обновленный код выше. Теперь он вводит 1undefined в консоли, но по крайней мере ошибок нет 🙂 И html выводит [обещание объекта]

5. можете ли вы добавить console.logs(headers) after headers.append("Authorization", "Basic " base64.encode(username ":" password)); . Я хотел бы увидеть значение header . Покажите мне ответ консоли