Использование одной функции для обработки обоих вызовов API POST / GET с помощью axios - PullRequest
1 голос
/ 12 июня 2019

Как видно из заголовка, я пытался сделать универсальную функцию для выполнения вызовов GET и POST с одной функцией. Однако, поскольку при отправке вызова GET требуется запись params для хранения данных, а при отправке данных через POST требуется запись data (если я не ошибаюсь).

В настоящее время у меня есть следующая функция;

function api(method, call, params){
  return new Promise(function(resolve, reject){
    axios({
      url: call,
      method,
      params
    }).then(function(response) {
      var body = response.data;
      if(body.status !== 1){
        return reject(body.message);
      }

      resolve(body.response);
    }).catch(function(err){
      reject(err);
    });
  });

GET-вызовы работают нормально, так как есть запись params, но для POST-вызовов она перестает работать. Как я могу это исправить, чтобы у меня была одна функция для обработки обоих вызовов?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Другой способ - принять config объект в качестве параметра. Кроме того, вам не нужно переносить axios() в новое обещание as axios () `возвращает обещание itsef.

function api(config) {
  const baseUrl = "http://foo.baz";

  const updatedConfig = Object.assign({}, config, {
    // If you want to append base url to all api methods.
    url: `${baseUrl}${config.url}`
  });

  return axios(updatedConfig).then(response => {
    const body = response.data;

    if (body.status !== 1) {
      throw new Error(body.message);
    }

    return body.response;
  });
}

Использование:

api({
  url: "/user",
  method: "get",
  params: { id: "xyz" }
}).then(() => { });

или

api({
  url: "/tag",
  method: "post",
  data: { tag: "abc" }
}).then(() => { });
0 голосов
/ 12 июня 2019

Я решил это, просто перетащив объект в переменную и добавив запись.

Пример:

var data = {
  url: call,
  method
}

if(method.toLowerCase() === 'post'){
  data['data'] = params;
}else{
  data['params'] = params;
}    

axios(data).then(function(response) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...