0
点赞
收藏
分享

微信扫一扫

前端项目实战98-数据postgrest.get请求封装

王传学 2022-10-29 阅读 38

getList: (resource: any, params: any) => {
const primaryKey = getPrimaryKey(resource, primaryKeys);
const { pageIndex, pageSize } = params.pagination;
const { field, order } = { field: 'id', order: 'desc' }
const obj: any = {}
for (let key in params.filter) {
if (params.filter[key]) {
obj[`${key}@like`] = `${params.filter[key]}`
}
}
const parsedFilter = parseFilters(Object.assign({ is_delete: 0 }, obj), defaultListOp);
const query = {
...parsedFilter,
limit: String(pageSize),
offset: String((pageIndex - 1) * pageSize),
order: getOrderBy(field, order, primaryKey),
// append filters
};
// add header that Content-Range is in returned header
const options = {
headers: new Headers({
Accept: 'application/json',
Prefer: 'count=exact'
})
};
const url = `${PostgrestUrl}/${resource}?${new URLSearchParams(query)}`;
return httpClient(url, options).then(({ headers, json }) => {
if (!headers.has('content-range')) {
throw new Error(
`The Content-Range header is missing in the HTTP Response. The postgREST data provider expects
responses for lists of resources to contain this header with the total number of results to build
the pagination. If you are using CORS, did you declare Content-Range in the Access-Control-Expose-Headers header?`
);
}
const obj: any = headers
const numTotal: any = parseInt(
obj
.get('content-range')
.split('/')
.pop(),
)
return {
data: json.map((obj: any) => dataWithId(obj, primaryKey)),
total: numTotal,
page: parseInt(query.offset),
size: parseInt(query.limit),
pages: Math.round(numTotal - 1 / query.limit),
};
}).catch((err) => {
return err
})
},



举报

相关推荐

0 条评论