在Vue中使用AWS Amplify DataStore

首先

最近,Amplify DataStore已经发布了。你可以在官方博客上了解详细信息,但是我简单尝试了一下,感觉不需要编写GraphQL也可以使用GraphQL。接下来,我将与以前使用Amplify和AppSync(GraphQL)的方法进行比较并进行解释(参考文章)。

开始使用

首先,让我们创建一个Vue项目。

$ npm install -g @vue/cli
$ vue create amplify-datastore-sample
$ cd amplify-datastore-sample

进行amplify的初始化等操作

$ npx amplify-app

当处理完成时,将生成一个名为amplify的目录。该目录内包含了Amplify使用的AWS服务信息。
我们将修改amplify/backend/api/<数据源名称>/schema.graphql文件的内容。

enum PostStatus {
  ACTIVE
  INACTIVE
}

type Post @model {
  id: ID!
  title: String!
  rating: Int!
  status: PostStatus!
}

我将部署到AWS的环境中。

$ npm run amplify-modelgen

执行后将部署AppSync和DynamoDB。这样AWS方面的准备工作就完成了。

设置

我会安装所需的软件包。

$ npm i @aws-amplify/core @aws-amplify/datastore

将安装的软件包导入。
当运行 npm run amplify-modelgen 时,models 目录会在 src 目录下生成。

import { DataStore } from "@aws-amplify/datastore"
import { Post, PostStatus } from "./models"

保存数据

在写入数据时,使用DataStore.save()函数。

await DataStore.save(
  new Post({
    title: "My First Post",
    rating: 10,
    status: PostStatus.ACTIVE
  })
)
スクリーンショット 2019-12-05 17.11.26.png

如果用GraphQL写的话…

const saveBody = `
  mutation {
    putData(
      input: {
        title: "My First Post",
        rating: 10,
        status: "active"
      }
    )
  }
`
await API.graphql(graphqlOperation(saveBody))

查询数据

在获取数据时,使用 DataStore.query() 方法。

const posts = await DataStore.query(Post)

也可以指定限制或条件。

await DataStore.query(
  Post,
  c => c.status("eq", PostStatus.ACTIVE),
  {
    limit: 10
  }
)

用GraphQL写的话……

const queryBody = `
  query {
    queryData(limit: 10){
      items {
        id,
        title,
        rating,
        status
      }
    }
  }
`
const posts = await API.graphql(graphqlOperation(queryBody))

删除数据

在删除数据时,可以使用 DataStore.delete() 方法。

const todelete = await DataStore.query(Post, "1234567")
await DataStore.delete(todelete)
スクリーンショット 2019-12-05 17.12.26.png

如果用GraphQL写的话,

const deleteBody = `
  mutation {
    deleteData(
      input: {
        id: "1234567"
      }
    )
  }
`
await API.graphql(graphqlOperation(deleteBody))

最后

使用GraphQL的查询代码量会增加,生成查询语句也会变得繁琐。但是,使用AmplifyDataStore可以解决这些问题。虽然需要处理身份验证等方面的内容才能在生产环境中使用,但它似乎非常值得使用。再见!

广告
将在 10 秒后关闭
bannerAds