微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DataLoader GraphQL 返回错误数据的问题

如何解决DataLoader GraphQL 返回错误数据的问题

我使用带有 GraphQL 的节点开发了一个 API,当我添加 DataLoaders 时,解析器开始返回错误的数据,比如我传递了 4 个 Id [3,3,1,2],批处理函数数据库中查找并返回有序的[1,2,3] 当返回到解析器时,第一个 id 为 3 的对象接收到 id 为 1 的响应。

Project Packages versions ->
    "DataLoader": "1.3.0","express": "^4.17.1","express-graphql": "^0.11.0","graphql": "^15.3.0","graphql-fields": "^2.0.3","graphql-tools": "^6.2.4",

我也尝试使用最新版本的数据加载器,但没有用

关注我的代码

Resolver ->

Address: {
        idCity: (parent,args,{ db,DataLoaders: { cityLoader } }: { db: DbConnection,DataLoaders: DataLoaders },info: GraphQLResolveInfo) => {
            return cityLoader.load({ info,key: parent.get('idCity') })
                .catch(handleError);
        }
    },
Data Loader Factory ->

cityLoader: new DataLoader<DataLoaderParam<number>,CityInstance>(
                (params: DataLoaderParam<number>[]) => CityLoader.batchCities(this.db.City,params,this.requestedFields),{
                    cacheKeyFn: (param: DataLoaderParam<number[]>) => param.key
                }
            ),
DataLoaderParam ->

export interface DataLoaderParam<T> {
    key: T;
    info: GraphQLResolveInfo;
}
City Loader ->

export class CityLoader {
    static async batchCities(City: CityModel,params: DataLoaderParam<number>[],requestedFields: RequestedFields) {
        const ids: number[] = params.map(item => item.key);

        return City["findAll"]({
            where: { id: { $in: ids } },attributes: requestedFields.getFields(params[0].info,{ keep: ['id'],exclude: [] })
        });
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。