UnknownType 类型的验证错误:未知类型 CreateUserInput

Posted

技术标签:

【中文标题】UnknownType 类型的验证错误:未知类型 CreateUserInput【英文标题】:Validation error of type UnknownType: Unknown type CreateUserInput 【发布时间】:2021-06-10 22:01:40 【问题描述】:

使用 AppSync Query Playground 运行此查询。

mutation UserMutation ($input: CreateUserInput!) 
    createUser
      (input: $input) 
      
          uniqueID
          recordType
          userName
          userEmail
          userEmailVerified
          userCreated
          userLastModified
          userEnabled
          userStatus
          userValidFrom
          userValidTo
      
    

查询变量是


  "input":  
  
      "uniqueID": "UUID-formatted",
      "recordType": "USER",
      "userName": "username",
      "userEmail": "mailadres",
      "userEmailVerified": true,
      "userCreated": "2020-12-04T22:32:37.000Z",
      "userLastModified": "2020-12-04T22:34:15.000Z",
      "userEnabled": true,
      "userStatus": "CONFIRMED",
      "userValidFrom": "2021-03-12T11:03:37.283Z",
      "userValidTo": "9999-12-31T23:59:59.999Z"
  

按预期在 DynamoDB 表中创建一条记录。

这表明模型和解析器在 AppSync 中得到了很好的定义。

在 NodeJS Express 环境中运行完全相同的代码会产生上述错误。

API-key 和 GraphQL 端点是正确的。使用和工作的其他实体的方法完全相同。

这是 NodeJS 代码

exports.userCreate = (cognitosub, userName, cognitoemail, cognitoemail_verified, cognitoUserCreateDate, cognitoUserLastModifiedDate, cognitoEnabled, cognitoUserStatus, userValidFrom, userValidTo) => 
  const mutateQuery = gql(`
  mutation UserMutation ($input: CreateUserInput!) 
    createUser
      (input: $input) 
      
          uniqueID
          recordType
          userName
          userEmail
          userEmailVerified
          userCreated
          userLastModified
          userEnabled
          userStatus
          userValidFrom
          userValidTo
      
    
  `);
  const mutateVariables = JSON.parse(`
    "uniqueID" : "$cognitosub",
    "recordType" : "USER",
    "userName" : "$userName",
    "userEmail" : "$cognitoemail",
    "userEmailVerified" : $cognitoemail_verified,
    "userCreated" : "$cognitoUserCreateDate",
    "userLastModified" : "$cognitoUserLastModifiedDate",
    "userEnabled" : $cognitoEnabled,
    "userStatus" : "$cognitoUserStatus",
    "userValidFrom" : "$utils.dateConvertToISOString(userValidFrom)",
    "userValidTo" : "$utils.dateConvertToISOString(userValidTo)"
  `)
  return new Promise ((resolve, reject) => 
    console.debug(`$Date(Date.now()) - utilities.userCreate.mutateVariables`,mutateVariables)
    graphqlClient.mutate(
      mutation: mutateQuery, 
      fetchPolicy: 'no-cache', // Mutate suporteert alleen 'no-cache'
      variables: input: mutateVariables
    )
      .then((success) => 
        // console.debug(`$Date(Date.now()) - utilities.userCreate.then`,success)
        if (success === null) reject('userIsNull')
        else 
          resolve(success.data.createUser.uniqueID)
      )
      .catch((err) => 
        console.debug(`$Date(Date.now()) - utilities.userCreate.catch\n`,err)
        reject(err)
      )
  )

完全相同的代码用于具有 UUID、标识、validFrom 和 ValidTo 日期的不太复杂的对象。它就像一个魅力。

我查看了每个错误和拼写错误。代码一直抛出这两个错误。

graphQLErrors: [
    
      path: null,
      locations: [  line: 1, column: 31, sourceName: null  ],
      message: 'Validation error of type UnknownType: Unknown type CreateUserInput'
    ,
    
      path: null,
      locations: [  line: 2, column: 3, sourceName: null  ],
      message: "Validation error of type FieldUndefined: Field 'createUser' in type 'Mutation' is undefined @ 'createUser'"
    
  ]

哪些是错误对象的转储。

Appolo-client 用于访问 DynamoDB。在 AppSync GraphQL Playground 中创建的记录可以在数据库中完美查看。

我这里没有线索。有人可以帮忙吗?

【问题讨论】:

为什么是JSON.parse()? variables 是一个简单的对象,您可以通过简单的方式创建 我对 NodeJS 比较陌生。我在 15 年前退出编程,开始更多地从事 IT 项目的项目和项目管理方面的工作。最近我再次开始编程,发现很多事情都发生了变化;-) 认为 AWSSyncClient 需要 JSON.parse 【参考方案1】:

今天我真的研究了这个问题,并决定不再使用 AWS 的 AppSync 客户端(顺便说一下,每次更新 npm 都会产生一些依赖构建问题......) 我选择使用 Apollo 客户端最新版本,它不会出现任何 npm 更新问题,并且是 AWS 在后台使用的客户端的最新版本(如果我了解情况)(阅读可以很好地阅读论坛)方式;-))

我在 AppSync 上的身份验证方面遇到了一些问题,但我设法解决了这个问题。

这段代码完全修复了所有以前的错误(对我来说)

const gql = require("graphql-tag"); 
const ApolloClient = require("@apollo/client").ApolloClient
const ApolloLink = require("@apollo/client").ApolloLink
const InMemoryCache = require("@apollo/client").InMemoryCache;
const createHttpLink = require("@apollo/client").createHttpLink;
const createAuthLink = require("aws-appsync-auth-link")
require('cross-fetch/polyfill');

const clientGraphQL = new ApolloClient(
  link: ApolloLink.from([
    createAuthLink( 
      url: aws_secrets.AWS_DEV_APPSYNC_ENDPOINT, 
      region:aws_secrets.REGION, 
      auth:
        
          type: "API_KEY",
          apiKey: aws_secrets.AWS_DEV_APPSYNC_API_KEY,
         
    ),
    createHttpLink( 
      uri: aws_secrets.AWS_DEV_APPSYNC_ENDPOINT 
    ),
  ]),
  cache: new InMemoryCache(),
);

通过将所有秘密隐藏在一个特殊文件中来安全代码。 createAuthLink 是我唯一需要 AWSAppSync (恕我直言)的东西。 我没有设法从 Apollo 客户端与 CreateAuthLink 建立正确的连接。

希望这对你们中的一些人有所帮助...

【讨论】:

另一个优点:如果出现问题,错误对象中的错误解释会更好

以上是关于UnknownType 类型的验证错误:未知类型 CreateUserInput的主要内容,如果未能解决你的问题,请参考以下文章

OpenCv Unspecified 错误(节点不代表用户对象(未知类型?))

Gatsby Contentful - GraphQL 查询错误:未知类型“ContentfulFixed”

未捕获错误:未知类型:d3.js v5.4.0中的dragend

“未知类型\”CreateAccountInput\”。尝试变异/创建新对象时使用graphene_django

pptpsetup 遇到错误:“EAP:未知身份验证类型 26;Naking”

AWS Amplify 突变调用返回“UnknownArgument 类型的验证错误:未知字段参数”