使用一个函数通过axios处理两个POST / GET API调用

时间:2019-06-11 21:58:54

标签: javascript node.js api axios

正如标题所述,我正在尝试做的是使一个通用函数同时使用一个函数进行GETPOST调用。但是,因为在发送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);
    });
  });

因为有params条目,所以GET调用可以正常工作,但是对于POST调用,它将停止工作。如何解决此问题,以便有一个函数可以处理这两个调用?

2 个答案:

答案 0 :(得分:0)

我通过将对象拉入变量并添加条目来解决它。

示例:

var data = {
  url: call,
  method
}

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

axios(data).then(function(response) ...

答案 1 :(得分:0)

另一种方法是接受config对象作为参数。另外,您不需要将axios()包装在新的诺言中as axios()`返回诺言itef。

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(() => { });