转换输入类型字段数据的另一种方法?

时间:2021-03-14 13:18:55

标签: graphql sequelize.js apollo-server

我在 GraphQL 中使用 sequelize,我需要使用运算符。问题是别名已被弃用,所以我必须找到一种方法将字符串转换为符号。

例如:{name=iLike:value} -> {name : {[Op.iLike]:value}

实际上我的解决方案是使用自定义标量。

Operator: new GraphQLScalarType({
    name: 'Operator',
    description: '',
    serialize(value) {
        return value;
    },
    parseValue(value) {
        return value;
    },
    parseLiteral({value, kind}) {
        const ALLOWED_OPERATORS = /(iLike|like|gt|lt|gte|lte)/;

        if (kind === Kind.STRING) {
            if (!ALLOWED_OPERATORS.test(value)) {
                return null;
            }

            const op = Op[value.split(':')[0]];
            value = value.split(':').slice(1, value.length).join(':');

            return {[op]: value};
        }
        return null;
    },
})

当然,我可以扩展代码以使用数组运算符(如 In 或 notIn)。实际上,它工作得很好(除了 parseLiteral() 被调用了两次)。

但我不确定这是不是好方法,我想知道是否有另一种更简洁的方法来实现?

0 个答案:

没有答案
相关问题