vue и глобул топор ios запрос - PullRequest
       7

vue и глобул топор ios запрос

0 голосов
/ 29 февраля 2020

В настоящее время у меня есть следующий топор ios пост-запрос в качестве примера:

в загрузке / топор ios. js

import Vue from 'vue'
import axios from 'axios'
import qs from 'qs'

Vue.prototype.$axios = axios
Vue.prototype.$qs = qs
Vue.prototype.$serverUrl = 'http://localhost:8090/api/';

На моей странице:

this.$axios.post(this.$serverUrl, null, 
{ data: {version: "1", command: "login", email: this.regEmail, password: this.password, API: 2, token: "dummy"}, 
transformRequest: [(data, headers) => {return this.$qs.stringify(data);}]})
.then((response) => {...})
.catch((err) => {...})
.finally(() => {...})

Это работает нормально, но я хочу глобализировать его, чтобы базовый URL и другие фиксированные параметры уже были там, и я просто отправлю дополнительные параметры для конкретного вызова c:

this.$postCall(call specific params...)
.then((res) => {...})
.catch((err) => {...})
.finally(() => {...})

Я понимаю, что должен создать прототип чего-то вроде

Vue.prototype.$postCall = function(param) {
}

Но я не уверен, как обратные вызовы должны go возвращаться к вызывающей стороне ...

Редактировать: Я сделал следующее:

Vue.prototype.$postCall = function (params) {
    return this.$axios.post('http://localhost:8090/api', null, { data: { API: 2, version: "1", params}});
}

и вызвал его:

this.$postCall({ command: "login", email: this.regEmail, password: this.password, token: "dummy" })

В отладке я вижу правильный информационный ключ: значение в параметрах, и я ожидал дополнительного параметры должны быть добавлены к фиксированным, но это не так, что мне не хватает?

Edit2: Исправлено простым l oop

let theData = {
    API: 2, 
    version: "1", 
};
for (var k in params) {
    theData[k] = params[k];
}

1 Ответ

1 голос
/ 29 февраля 2020

Другим методом вы можете создать пользовательский экземпляр для ax ios, поэтому он будет использовать значения по умолчанию при вызове .get() .post() et c. https://github.com/axios/axios#custom -instance-defaults

например

import axios from 'axios';
import qs from 'qs';

Vue.prototype.$axios = axios.create({
  baseURL: 'http://localhost:8090/api/',
  transformRequest: [(data, headers) => qs.stringify(data)],
});

Редактировать:

  1. как использовать это без параметра url, который он ожидает?

Только для вызова после ссылки на URL, вы можете сделать это с помощью this.$axios.post('/', /* ... */)

параметры данных по-прежнему необходимо передавать как прежде. Мне было интересно, есть ли способ сделать глобализировать функцию пост-запроса.

Сделайте $postCall, возвращающее обещание axios.post() например

Vue.prototype.$postCall = function (params) {
  return this.$axios.post('/', { version: "1", command: params.command /*, other params */ });
}

И вы можете использовать на страница

this.$postCall({ command: "some commmand" })
  .then((response) => {...})
  .catch((err) => {...})
  .finally(() => {...});
...