我正在阅读GraphQl的文档,并意识到新的Schema Langugage仅支持默认解析器。有没有办法在使用新的架构语言时添加自定义解析器?
let userObj = {
id: 1,
name: "A",
homeAddress: {
line1: "Line1",
line2: "Line2",
city: "City"
}
};
let schema = buildSchema(`
type Query {
user(id: ID): User
}
type User {
id: ID
name: String
address: String
}
`);
//I would like User.address to be resolved from the fields in the json response eg. address = Line1, Line2, City
这是我定义的架构。我想在这里添加一些行为,允许我解析地址对象并返回一个连接的字符串值。
答案 0 :(得分:2)
正如HagaiCo和github issue所提到的,正确的方法是使用graphql-tools。
它有一个名为 makeExecutableSchema 的函数,它接受一个模式并解析函数,然后返回一个可执行模式
答案 1 :(得分:0)
这里好像你有一个混乱,因为你定义了这个地址是String但是你发送了一个字典来解决它。
你能做的是定义一个标量地址类型:
scalar AddressType
如果您使用buildSchema,然后将解析函数附加到它。 (或使用graphql-tools轻松完成)
或从头开始构建类型,如the official documentations所示:
var OddType = new GraphQLScalarType({
name: 'Odd',
serialize: oddValue,
parseValue: oddValue,
parseLiteral(ast) {
if (ast.kind === Kind.INT) {
return oddValue(parseInt(ast.value, 10));
}
return null;
}
});
function oddValue(value) {
return value % 2 === 1 ? value : null;
}
然后你可以将字典解析为字符串(parseValue),否则