Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js GraphQL字段未定义_Node.js_Graphql_Graphql Js - Fatal编程技术网

Node.js GraphQL字段未定义

Node.js GraphQL字段未定义,node.js,graphql,graphql-js,Node.js,Graphql,Graphql Js,从GraphQL/Node/Express/Typescript堆栈开始,我遇到了一个问题,字段参数没有传递给解析器函数。我有两个问题: 用户列表: UserList: { type: new GraphQLList(UserType), args: { userName: { type: GraphQLString }, userIsLocked: {

从GraphQL/Node/Express/Typescript堆栈开始,我遇到了一个问题,字段参数没有传递给解析器函数。我有两个问题:

用户列表:

UserList: {
        type: new GraphQLList(UserType),
        args: {
            userName: {
                type: GraphQLString
            },
            userIsLocked: {
                type: GraphQLBoolean
            },
            userIsConfirmed: {
                type: GraphQLBoolean
            },
            userAwaitingPassword: {
                type: GraphQLBoolean
            }
        },
        resolve: ((_, {fields}) => new User().where({fields}))
    }
和用户:

User: {
    type: UserType,
    args: {
        userId: {
            type: GraphQLID
        }
    },
    resolve: ((_, {userId}) => new User().getById({userId}))
}
User().where()
函数默认显示未提供条件的所有用户。但是,请考虑下面的查询和结果:

query All {
  UserList(userIsLocked:true){
    userId
    userName
    userIsLocked
  }
}

// Results
{
  "data": {
    "UserList": [
      {
        "userId": "a4f1d968-52d6-4148-bf62-1e132a4defde",
        "userName": "user1",
        "userIsLocked": false
      },
      {
        "userId": "b42a1170-096a-11e9-b568-0800200c9a66",
        "userName": "administrator",
        "userIsLocked": false
      }
    ]
  }
}
显然,userIsLocked没有在
where()
函数上传递fields参数。然而,以下工作:

query Individual {
  User(userId: "a4f1d968-52d6-4148-bf62-1e132a4defde") {
    userId
    userName
    userIsLocked
  }
}

// Results
{
  "data": {
    "User": {
      "userId": "a4f1d968-52d6-4148-bf62-1e132a4defde",
      "userName": "user1",
      "userIsLocked": false
    }
  }
}

userId
登录到对
getById()
的请求时,我在控制台中看到
{“userId”:“a4f1d968-52d6-4148-bf62-1e132a4defde”}
。但是当
字段
登录到
where()
请求时,控制台中显示的所有内容都是
未定义的
,我的查询默认显示所有用户。我不明白为什么两个显然相等的查询会以如此不同的方式运行。我已经浏览了GraphQL的文档,但我能找到的只是示例查询和一般查询结构

传递给
resolve
函数的第二个参数是一个对象,其属性映射到该字段的参数。让我们看看正在工作的解析器:

resolve: (_, {userId}) => new User().getById({userId})
在这里,您使用从第二个参数解包
userId
属性,并将其签名到同名变量。然后使用创建一个具有
userId
属性的对象(使用定义的
userId
变量的值),并将此对象传递给
getById
方法

这在语法上等同于以下函数:

resolve: (_, args) => {
  const userId = args.userId
  return new User().getById({ userId: userId })
}
resolve: (_, {fields}) => new User().where({fields})
您的问题不清楚您使用的是什么ORM,因此我无法说明您是否正确调用了其他解析器中的
where
方法。但是,您肯定没有解压缩该字段的任何参数。以下是您的功能:

resolve: (_, args) => {
  const userId = args.userId
  return new User().getById({ userId: userId })
}
resolve: (_, {fields}) => new User().where({fields})
这相当于:

resolve: (_, args) => {
  const fields = args.fields
  return new User().where({ fields: fields })
}
您的字段有以下四个参数:
userName
userIsLocked
userisconfirm
userwaitingpassword
<代码>字段不是有效的参数,因此将始终未定义,除非将名为字段的参数添加到
用户列表
字段并实际传入。我冒昧猜测一下,你的模型也没有
字段
属性。如果只想将arguments对象传递给
where
方法,可以执行以下操作:

resolve: (_, fields) => new User().where(fields)

注意缺少花括号。同样,您还没有告诉我们您正在使用什么ORM或用户模型本身,因此如果您没有正确使用该API,这仍然可能无法提供所需的结果。然而,希望这能让你走上正轨。

就是这样。拆下支架后,我看到它实际上是在用这些键馈送对象。