前端项目实战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 @ 2022-10-22 17:03  前端导师歌谣  阅读(29)  评论(0)    收藏  举报