Aws Amplify:部分更新(突变)
Posted
技术标签:
【中文标题】Aws Amplify:部分更新(突变)【英文标题】:Aws Amplify: Partial updates(mutations) 【发布时间】:2020-11-12 19:01:23 【问题描述】:我有 2 个(希望是新手)问题需要来自社区的意见:
(1) 我对应用程序的 schema.graphql 文件进行了更改。如何确保更新相应的 queries.js、mutations.js、subscriptions.js 文件?以前这些在我运行放大推送命令时会更新(我认为),但现在它们不再更新了。
(2) 如何使用 aws amplify 进行部分突变?例如:如果突变具有全名、城市,我将如何在不从前端应用程序传递城市的情况下更新全名? 我可以在第一个屏幕中编辑全名,在第二个屏幕中编辑城市。如果我没有在第一个屏幕的突变中通过 city,它会被覆盖为 null。
这是突变的样子:
mutations.js:
const updateUserProfile =
mutation UpdateUserProfile(
$input: UpdateUserProfileInput!
$condition: ModelUserProfileConditionInput
)
updateUserProfile(input: $input, condition: $condition)
id
fullName
city
createdAt
updatedAt
owner
;
userprofile.vue
import Auth from 'aws-amplify';
import createUserProfile, updateUserProfile from '@/graphql/mutations';
const userProfileInput=
id:userId,
fullName:'Ajit Goel',
;
await API.graphql(graphqlOperation(updateUserProfile, input: userProfileInput));
schema.graphql:
type UserProfile @model
@key(fields:["id"])
@auth(rules: [allow: owner])
id: String!
fullName: String
city:String
运行更新突变时控制台出错:
【问题讨论】:
【参考方案1】:让我试着帮助你
放大推送完成后,您应该能够看到更改。请确保在尝试之前保存文件更改。
根据您的架构,城市可能设置为带有感叹号的必填项。在这种情况下,您可以删除感叹号或将城市设置为空字符串。如果特定操作需要,您可以稍后在解析器中添加此检查。
【讨论】:
问题 1 肯定不能正常工作。对于第二个问题,我可以在第一个屏幕中编辑全名,在第二个屏幕中编辑城市。在这种情况下,我将如何在每个屏幕上写下我的突变?如果我在第一个屏幕的突变中没有通过 city,它会被覆盖为 null。 我明白了。我还提到将城市作为空字符串传递。你试过吗? 您可能需要不同的逻辑来涵盖创建新用户配置文件或更新它们。对于新的,我没有看到任何问题,因为所有字段都是新的/空的。要更新现有配置文件,您必须查询当前值并在部分突变中使用它们。 谢谢@gerard sans,grapql 需要比我最初认为需要的更多的工作。以上是关于Aws Amplify:部分更新(突变)的主要内容,如果未能解决你的问题,请参考以下文章
AWS Amplify in React,如何从订阅的侦听器呈现新数据
使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?
使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变
aws amplify appsync 中的 Graphql 突变错误
AWS Amplify + Graphql + Dynamodb:突变时出现 ConditionalCheckFailedException 错误