所需类型“ID!”的变量“$charactersID”未提供。,位置:[object Object],路径:未定义

Posted

技术标签:

【中文标题】所需类型“ID!”的变量“$charactersID”未提供。,位置:[object Object],路径:未定义【英文标题】:Variable "$charactersID" of required type "ID!" was not provided., Location: [object Object], Path: undefined 【发布时间】:2020-09-15 03:52:50 【问题描述】:

我正在使用 apollo、graphql、react、mongo 并尝试使用名称和电子邮件在客户端创建一个新用户并将其发布在主页上,但是当我点击提交按钮时出现此错误 - 变量所需类型“ID!”的“$charactersID”未提供。,位置:[object Object],路径:未定义。我尝试为 charactersID 设置一个变量,但不确定我是否正确

import React, Component from 'react'
import Add_User from '../gql/mutations'
import Mutation from 'react-apollo'

class Signup extends Component
render()
    let name, email;
    return(
      <Mutation mutation=Add_User onCompleted=() => this.props.history.push('/')>
          (addUser, loading, error) => (
              <div>
                  Create new user
                <form onSubmit= e=>e.preventDefault(); 
                    addUser(variables: name: name.value, email: email.value )
                    name.value = ""
                    email.value = ""
                    >
                 <input type="text" name="name" ref=node =>  name = node placeholder 
    ="NAME"/> 
                 <input type="text" name="email" ref=node =>  email = node placeholder 
    ="EMAIL"/> 
                 <input type="submit" value="Submit" />
              </form>

             loading && <p>Loading...</p>
             error && <p>Error : Please try again </p>
              </div>

          )
      </Mutation>
    )



export default Signup;

突变

import gql from 'graphql-tag'

export const Add_User = gql`
mutation addUser($name: String!, $email: String, $description: String, $totalwins: Int, 
$charactersID: ID!)
addUser(name: $name, email: $email, description: $description, totalwins: $totalwins, 
charactersID: $charactersID)
    _id
    email
    name
    description
    totalwins
    charactersID
        name  
        wins
        losses
        percentage
        image
    


`

【问题讨论】:

可能您不需要charactersID 来创建用户对象 - 您可以使用单独的突变分配/添加/更改嵌套/相关数据 【参考方案1】:

您的操作包括五个变量:

$name: String!
$email: String
$description: String
$totalwins: Int
$charactersID: ID!

其中只有两个是非空的,这意味着它们是必需的——namecharactersID。但是,您在调用突变函数时只提供nameemail

addUser(variables: name: name.value, email: email.value )

【讨论】:

好吧,我有点想这是问题所在,但这并没有解决我想要创建一个用户的问题无需包含charactersID。我仍然需要它用于其他用途,但现在不需要 如果你让变量可以为空(ID 而不是ID!),那么 GraphQL 就不需要它。在这种情况下,您也可以完全省略变量和参数。但是,如果参数的类型在架构中是 ID!,则 必须 提供 - 在这种情况下,您需要先更改架构。 感谢您的帮助。我想到了。我的角色模型嵌套在用户模型中,因此我将不可为空的字段关闭并将它们更改为角色模型上的可空字段。它不是 id 本身,而是角色模型包含的字段,现在它按预期工作

以上是关于所需类型“ID!”的变量“$charactersID”未提供。,位置:[object Object],路径:未定义的主要内容,如果未能解决你的问题,请参考以下文章

在 GraphQL Mutate 函数中将 ID 作为正确的变量类型传递

当这些变量被删除时,如何停止获取所需导出变量的 Apollo GraphQL 查询

尽管有效,但未提供所需类型的变量

所需类型“上传!”的变量“$picture”没有提供

Gridsome:错误:所需类型的变量“字符串!”没有提供

无法解决 Playground 错误:未提供所需类型 \"MemberInput!\" 的变量 \"$input\"