0.0.4 • Published 3 years ago
ticatec-restful-fetch v0.0.4
Restful web api fetch
This is a library to call the restful api, which is based on the fetch function.
Restful的Web代理
通过封装fetch来完成result的api接口调用。
函数方法
浏览器可以通过import引入RestFetch,然后通过new新建一个restFetch的对象。构造方法如下:
let restFetch = new RestFetch(root);
拦截器
可以通过定义preHandler和postHandler来拦截系统的调用。定义方法如下:
RestFetch.interceptor.preHandler = (headers) => {
headers.append("token", appCtx.token)
}
RestFetch.interceptor.postHandler = async (resp) => {
//...调用后截获处理
}
输出日志
可以通过修改RestFetch的debug属性来决定是否可以输出日志
RestFetch.debug = false;
统一的错误处理捕获
通过统一的错误捕捉函数,不需要在每个调用都使用try/catch,但发生错误的时候仍然或在控制台抛出异常信息
RestFetch.onError = (err) => {
console.debug(TAG, '网络调用错误,', err);
if (err.status === 401) {
connectionManager.onDisconnected();
} else {
appCtx.showError(err.details.code);
}
}
读取数据后的预处理
当API调用成功,服务器端返回的数据需要整理后反给调用者,可以通过定义dataProcessor来处理数据。比如,将读取的数组对象转换成树状结构。也可能是格式化日期自动。都可以在这个地方进行数据处理。
let dataProcessor = (data) => {
//...解析出数据后进行处理
return data; //或者其他数据对象
}
GET
使用方法:
/**
* 调用GET方法
* @param url 相对路径
* @param params 参数对象
* @param dataProcessor 数据处理器
* @returns {Promise<any>}
*/
let data = async get(url, params, dataProcessor);
POST
使用方法:
/**
* 异步调用POST方法
* @param url 相对路径
* @param data Body中的对象,用json格式处理
* @param params 参数对象
* @param dataProcessor 数据处理器
* @returns {Promise<any>}
*/
let data = async post(url, data, params, dataProcessor)
PUT
使用方法:
/**
* 异步调用PUT方法
* @param url 相对路径
* @param data Body中的对象,用json格式处理
* @param params 参数对象
* @param dataProcessor 数据处理器
* @returns {Promise<any>}
*/
let data = async put(url, data, params, dataProcessor)
DELETE
使用方法:
/**
* 异步调用DELETE方法
* @param url 相对路径
* @param data Body中的对象,用json格式处理
* @param params 参数对象
* @param dataProcessor 数据处理器
* @returns {Promise<any>}
*/
let data = async del(url, data, params, dataProcessor)
示例
...
//创建restFetch并设置了拦截器
//服务器端返回的数据中registerOn是时间戳,在dataProcessor里面转换成日期格式
const getUserList = async () => {
return await restFetch.get('/data/user', null, (list)=>{
list.forEach(item=> {item.registerOn = new Date(item.registerOn});
});
}
const buildOrganizationTree = (list) => {
let tree = {};
//将list根据算法转换成tree
return tree;
}
const getOrganizations = async () => {
return await restFetch.get('/data/organization', {company: '0005'}, buildOrganizationTree);
}
//在调用的时候,可以使用try...catch...finally
const saveUser = async (user) => {
isBusy = true;
try {
await userService.save(user);
} catch (e) {
//如果在统一错误处理后,还希望再次处理,可以在此处
} finally {
isBusy = false;
}
}