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