[英]Validation error of type UnknownType: Unknown type CreateUserInput
使用 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 表中創建一條記錄。
這向我表明 model 和解析器在 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)
})
})
完全相同的代碼用於不太復雜的 object,其 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 中創建的記錄可以在數據庫中完美查看。
我這里沒有線索。 任何人都可以幫忙嗎?
今天我真的研究了這個問題,並決定不再使用 AWS 的 AppSync 客戶端(順便說一下,每次 npm 更新都會產生一些依賴構建問題......)我選擇 go 用於 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 的正確連接。
希望這對你們中的一些人有所幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.