首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在RedwoodJS上创建字段解析器

如何在RedwoodJS上创建字段解析器
EN

Stack Overflow用户
提问于 2020-03-22 18:57:14
回答 2查看 418关注 0票数 3

RedwoodJS自动将GraphQL查询解析器映射到api/src/services。如何为给定的GraphQL类型创建字段解析器?

假设我有这样的模式:

代码语言:javascript
复制
type Person {
  name: string!
  birthDate: DateTime!
  age: Int!
}

但是只有namebirthDate存储在数据库中。

使用graphql-tools,我将编写如下解析器:

代码语言:javascript
复制
const resolvers = {
  Query: { ... },
  Mutation: { ... },
  Person: {
    age(person) {
      return new Date().getFullYear() - person.birthDate.getFullYear();
    },
  },
};

PS:我知道年龄公式是错的。

PS2:为了简单起见,我在这里使用了age,假设计算或从数据库获取这是很昂贵的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-23 17:55:37

它几乎与您使用graphql-tools的方式相同。

导出一个与服务中键入的名称相同的对象:

代码语言:javascript
复制
// services/person.js
export const Person = {
    age: (_args, { root }) {
      return new Date().getFullYear() - root.birthDate.getFullYear();
    },
}

另外,您还可以在resolvers文件中导出一个person.sdl.js (但是服务占先):

代码语言:javascript
复制
// graphql/person.sdl.js

export const schema = gql`/* ... */`

export const resolvers = {
  Query: {},
  Mutation: {},
  Person: {},
}
票数 5
EN

Stack Overflow用户

发布于 2020-03-23 17:28:18

编辑:我误解了这个问题,这个答案只是包含创建查询+突变解析器,而不是计算字段的解析器。

要创建字段解析器,需要确定是为查询创建解析程序还是为突变创建处理程序。

我们可以使用以下模式作为示例:

代码语言:javascript
复制
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目录中实现查询和突变。

代码语言:javascript
复制
// 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 }
  })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60803655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档