我在 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() 被调用了两次)。
但我不确定这是不是好方法,我想知道是否有另一种更简洁的方法来实现?