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 错误

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