GraphQL为用户提供GraphQL工具

时间:2016-12-02 12:04:56

标签: node.js graphql

我有一台使用ExpressJS的GraphQL服务器。这是使用GraphQL-Tools的模式:

import UserModel from '../models/User'

export const Schema =  `

type User {
    id: Int!
    firstName: String
    lastName: String
}

type Query {
    users: [User]
}

schema {
    query: Query
}

`

export const resolveFunctions = {
    Query: {
        users() {
            return UserModel.findAll()
        }
    }
}

没有GraphQL-Tools我能够获得用户和某个用户的完整列表,但现在当我使用GraphQL-Tools时,我不知道如何通过id获得某个用户。

除了官方文档之外,我没有在GraphQL工具上找到任何资源,所以我希望这会有助于其他找到答案的人。

谢谢!

2 个答案:

答案 0 :(得分:3)

您应该添加一个查询:

user(id: String!): User

和处理程序:

user(root, args, ctx) {
  return UserModel.findOne({id: args.id});
}

(您可能需要调整参数类型和调用语义,我刚刚概述了所需的步骤)。

如果您想查看一个有效的示例,可以查看graphQL starter project。我最近在其中添加了一个非常相似的查询。

答案 1 :(得分:1)

您可以查看graphqly。它是构建在graphql-tools之上的抽象,可以帮助您更轻松地开发Graphql服务。以下是graphqly的示例代码:

import graphly from "graphqly";

const gBuilder = graphly.createBuilder();

// define types, inputs ... (in any order)
gBuilder.type("Products").implements("List").def(`
    products: [Product]!
`);

gBuilder.type("Product").def(`
    id: ID!
    name: String!
    link: String
    price: Int
`);

gBuilder
.query(`
    products(limit: Int = 20, offset: Int = 0, filter: ProductFilter): Products
`)
.resolve((root, args, context) => {
    // your resolver here
});