标签: graphql-js

将 GraphQL 模式从非 JS 服务器暴露给 JS 客户端

我有一个用 Java 实现的 GraphQL 服务器和一个查询它的 JavaScript 客户端。我不喜欢的是客户端只需要知道架构,而不能从服务器获取它,而是针对它动态构建查询。

现在,我明白 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,所以客户端和服务器都可以使用它。我的模式是用 Java 定义的,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。

这样的东西已经存在了吗?

javascript java graphql graphql-js

3
推荐指数
1
解决办法
1143
查看次数

如何将 Relay 变量设置为枚举值?

示例片段:

fragments: {
  viewer: () => Relay.QL`
    fragment on Viewer {
      people(first: $limit orderBy: $orderBy) {
        count
        edges {
          node {
            id,
            ${PersonListItem.getFragment('person')},
          },
        },
      }
    }
  `,
},
Run Code Online (Sandbox Code Playgroud)

orderBy参数接受下列枚举值:firstNameASC/ firstNameDESC/ lastNameASC/lastNameDESC

执行时this.setVariables({orderBy: 'firstName'})orderBy变量作为字符串传递给 GraphQL 服务器。

如何将这些变量中的任何一个传递给 Relay 的 setVariables 而不将它们作为字符串发送?

javascript relay reactjs graphql graphql-js

3
推荐指数
1
解决办法
1556
查看次数

在Graphql请求中发送双引号和反斜杠

我想在Graphql请求中发送双引号(“)和反斜杠(\),并希望将其取回作为响应。

请检查以下示例:

mutation M { 
    signUp
    (
        name: "Harsha Vardhan"
        username: "Harsha143", 
        email: "harshavardhan@sample.com",
        description: "Cool "boy" \n And good looking."
    ) 
    {
        _id,
        name
        username,
        email,
        description
}
Run Code Online (Sandbox Code Playgroud)

在上面的突变中,我想在描述中发送双引号和反斜杠。请指导我克服这个问题。

提前致谢。

graphql graphql-js

3
推荐指数
1
解决办法
3063
查看次数

GraphQL Viewer用于突变

拥有GraphQL突变的查看器是一个好习惯吗?从理论上讲,这对我来说是有意义的,因为如果你没有登录等等,一些突变终点是不可能的.

但是当我在网上看到例子时,我只看到了查询的GraphQL查看器的实现.对于突变,我没有看到任何观众的实现.例如,GitHub API在其所有突变之上没有查看器.

graphql graphql-js

3
推荐指数
1
解决办法
781
查看次数

动态生成GraphQL架构支持

是否可以动态创建GraphQL架构?

我们将数据存储在mongoDB中,并且可能会添加新字段.我们不希望在mongoDB文档中对此新添加的字段进行任何代码更改.

我们有什么方法可以动态生成架构吗?

模式在代码中定义,但对于java(模式为pojo),添加新属性时,必须更新并重新编译代码,然后再次存档和部署jar.有什么方法可以通过数据生成模式而不是预先定义它?

目前我们正在使用java相关项目(graphql-java,graphql-java-annotations)进行GraphQL开发.

java graphql graphql-js graphql-java

3
推荐指数
2
解决办法
3692
查看次数

错误:RootQueryType.resolve字段配置必须是对象

我是GraphQl的新手,刚刚创建了我的第一个模式来查看此错误

Error: RootQueryType.resolve field config must be an object
    at invariant (/Applications/Node/users/node_modules/graphql/jsutils/invariant.js:19:11)
    at /Applications/Node/users/node_modules/graphql/type/definition.js:360:56
    at Array.forEach (native)
    at defineFieldMap (/Applications/Node/users/node_modules/graphql/type/definition.js:357:14)
    at GraphQLObjectType.getFields (/Applications/Node/users/node_modules/graphql/type/definition.js:311:44)
    at typeMapReducer (/Applications/Node/users/node_modules/graphql/type/schema.js:209:25)
    at Array.reduce (native)
    at new GraphQLSchema (/Applications/Node/users/node_modules/graphql/type/schema.js:98:34)
    at Object.<anonymous> (/Applications/Node/users/schema/schema.js:39:18)
    at Module._compile (module.js:569:30)
Run Code Online (Sandbox Code Playgroud)

这是我的架构

const graphql = require('graphql');
const _ = require('lodash');
const{
    GraphQLObjectType,
    GraphQLInt, 
    GraphQLString,
    GraphQLSchema
} = graphql;

const users = [
    {id:'23', firstName:'Bill', age:20},
    {id:'47', firstName:'Samantha', age:21}
];

const UserType = new GraphQLObjectType({
    name: 'User',
    fields:{
        id: {type: GraphQLString},
        firstName: {type: …
Run Code Online (Sandbox Code Playgroud)

node.js graphql graphql-js

3
推荐指数
1
解决办法
2360
查看次数

graphql - 将多个查询的结果合并到一个数组中

我正在使用 graphQL 通过组合查询在多个 mongoDB 集合和 API 之间执行搜索。所有查询都返回结果类型

{
  _id: string; 
  name: string; 
  type: string;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将数据展平成单个数组?

组合查询示例:

query searchAll {
    books(input: {text: "e"}) {
        _id
        name
        type
    }
    magazines(input: {text: "e"}) {
        _id
        name
        type
    }
}
Run Code Online (Sandbox Code Playgroud)

响应目前看起来像:

{"data": {
        "books": [
            {
                "_id": "5a8ac759c25b7235ffdc6888",
                "name": "someBook",
                "type": "book"
            }
        ],
        "magazines": [
            {
                "_id": "5a87005bc25b7235ffdc4bdf",
                "name": "someMagazine-1",
                "type": "magazine"
            },
            {
                "_id": "5a870067c25b7235ffdc4be4",
                "name": "someMagazine-2",
                "type": "client"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

期望的回应:

{"data": {
    "results": [
            {
                "_id": "5a8ac759c25b7235ffdc6888", …
Run Code Online (Sandbox Code Playgroud)

graphql graphql-js

3
推荐指数
1
解决办法
8360
查看次数

如何在枚举中声明字符串

使用graphql enum可以创建预定义的元素列表,但是字符串不起作用。

例如:

enum Dias {
  lunes
  martes
  miércoles
  jueves
  viernes
  sábado
  domingo
}
Run Code Online (Sandbox Code Playgroud)

这返回一个错误 GraphQLError: Syntax Error: Cannot parse the unexpected character "\u00E9".

如何创建预定义的字符串列表?


编辑:为了提供更多的上下文,我想反映数据库架构,这是这样的(与猫鼬):

dias: {
  type: String,
  enum: ['lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado', 'domingo'],
  lowercase: true,
  required: true
}
Run Code Online (Sandbox Code Playgroud)

graphql graphql-js

3
推荐指数
1
解决办法
1386
查看次数

如何在GraphQL中返回对象数组,可能使用与返回单个对象相同的端点?

我正在制作GraphQL API,在其中我可以通过其ID检索汽车对象或在不提供任何参数的情况下检索所有汽车。

使用下面的代码,我可以通过提供id作为参数来成功检索单个汽车对象。

但是,在我希望得到对象数组的情况下,即当我完全不提供任何参数时,在GraphiQL上没有任何结果。

schema.js

let cars = [
  { name: "Honda", id: "1" },
  { name: "Toyota", id: "2" },
  { name: "BMW", id: "3" }
];

const CarType = new GraphQLObjectType({
  name: "Car",
  fields: () => ({
    id: { type: GraphQLString },
    name: { type: GraphQLString }
  })
});

const RootQuery = new GraphQLObjectType({
  name: "RootQueryType",
  fields: {
    cars: {
      type: CarType,
      args: {
        id: { type: GraphQLString }
      },
      resolve(parent, args) {
        if (args.id) {
          console.log(cars.find(car => …
Run Code Online (Sandbox Code Playgroud)

javascript node.js graphql graphql-js express-graphql

3
推荐指数
1
解决办法
5163
查看次数

GraphQL中的可选但非空字段

在更新我们的GraphQL API时,仅_id需要model 字段,因此!在下面的SDL语言代码中。其他字段(例如,name不必包含在更新中)也不能具有null值。当前,!从名称字段中排除namein 允许最终用户不必在更新中传递in,但允许最终用户传递in的nullname,这是不允许的。

一个null值使我们知道需要从数据库中删除一个字段。

下面是一个可能导致问题的模型示例- Name自定义标量不允许空值,但GraphQL仍允许它们通过:

type language {
  _id: ObjectId
  iso: Language_ISO
  auto_translate: Boolean
  name: Name
  updated_at: Date_time
  created_at: Date_time
}
input language_create {
  iso: Language_ISO!
  auto_translate: Boolean
  name: Name!
}
input language_update {
  _id: ObjectId!
  iso: Language_ISO!
  auto_translate: Boolean
  name: Name
}
Run Code Online (Sandbox Code Playgroud)

当传入null值时,它会绕过我们的Scalars,因此如果null不是允许的值,我们就不会引发用户输入验证错误。

我知道这!意味着non-nullable,并且缺少!手段意味着该字段可为空,但是令人沮丧的是,据我所知,如果某个字段不是必需的/可选的,我们无法为该字段指定确切的值。仅在更新时会发生此问题。

有什么方法可以通过自定义Scalars解决此问题,而不必在每个更新解析器中启动硬编码逻辑,而这似乎很麻烦?

可能失败的示例变异

mutation tests_language_create( $input: language_update! ) { …
Run Code Online (Sandbox Code Playgroud)

node.js graphql graphql-js apollo-server

3
推荐指数
1
解决办法
949
查看次数