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

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
})
},

posted @   前端导师歌谣  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示