正如标题所述,我正在尝试做的是使一个通用函数同时使用一个函数进行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);
});
});
因为有params条目,所以GET调用可以正常工作,但是对于POST调用,它将停止工作。如何解决此问题,以便有一个函数可以处理这两个调用?
答案 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(() => { });