RedwoodJS自动将GraphQL查询解析器映射到api/src/services。如何为给定的GraphQL类型创建字段解析器?
假设我有这样的模式:
type Person {
name: string!
birthDate: DateTime!
age: Int!
}但是只有name和birthDate存储在数据库中。
使用graphql-tools,我将编写如下解析器:
const resolvers = {
Query: { ... },
Mutation: { ... },
Person: {
age(person) {
return new Date().getFullYear() - person.birthDate.getFullYear();
},
},
};PS:我知道年龄公式是错的。
PS2:为了简单起见,我在这里使用了age,假设计算或从数据库获取这是很昂贵的。
发布于 2020-03-23 17:55:37
它几乎与您使用graphql-tools的方式相同。
导出一个与服务中键入的名称相同的对象:
// services/person.js
export const Person = {
age: (_args, { root }) {
return new Date().getFullYear() - root.birthDate.getFullYear();
},
}另外,您还可以在resolvers文件中导出一个person.sdl.js (但是服务占先):
// graphql/person.sdl.js
export const schema = gql`/* ... */`
export const resolvers = {
Query: {},
Mutation: {},
Person: {},
}发布于 2020-03-23 17:28:18
编辑:我误解了这个问题,这个答案只是包含创建查询+突变解析器,而不是计算字段的解析器。
要创建字段解析器,需要确定是为查询创建解析程序还是为突变创建处理程序。
我们可以使用以下模式作为示例:
export const schema = gql`
type Person {
id: String!
name: String!
age: Int!
}
type PersonInput {
name: String
age: Int
}
type Mutation {
createPerson(input: PersonInput!): Person
}
type Query {
people: [Person]
person(id: String!): Person
}
`如果上述模式存储在名为persons.sdl.js的文件中,则可以在api/src/graphql目录中的persons.js目录中实现查询和突变。
// implements Mutation.createPerson(...)
export const createPerson({ input }) => {
return db.person.create({
data: input
})
}
// implements Query.people
export const people = () => {
return db.person.findMany()
}
// implements Query.person(...)
export const person = ({ id }) => {
return db.person.findOne({
where: { id }
})
}https://stackoverflow.com/questions/60803655
复制相似问题