使用GraphQL+DynamoDB来将数据输出到屏幕并查看

我們想在這篇文章中使用GraphQL查詢語言,將存儲在DynamoDB中的數據實際輸出到畫面上。

请参考之前的文章,了解如何使用GraphQL、AppSync向DynamoDB插入数据。

环境

    • Pug を使用

 

    • VuetifyのコンポーネントをUIで使用

 

    • コーディング規約は Nuxt.js に則って StandardJS

 

    Visual Studio Code

引用的文本是关于Vue框架中的Vuetify插件的介绍。以下是对它的简化释义:

使用Vuetify组件库来增强Vue应用程序的外观和交互设计。

如果使用Vue CLI的情况下

如果使用Vue CLI的话,请。

vue add vuetify 

现在你可以使用Vuetify的UI组件了。

当涉及到 Nuxt.js

对于 Nuxt.js,可以按照 Vuetify 的快速入门文档进行操作。

$ yarn add @nuxtjs/vuetify -D
# OR
$ npm install @nuxtjs/vuetify -D

在安装完成后,将其添加到 nuxt.config.js 文件的 buildModules 中。

{
  buildModules: [
    '@nuxtjs/vuetify'
  ]
}

如果你加上,就可以了。

让GraphQL可用

从 Amplify 库中导入 GraphQL 查询,并调用 API(GraphQL)。
在 plugins 文件夹中创建 amplify.js 文件,并将内容设置为以下方式:

import Amplify, { graphqlOperation } from 'aws-amplify'
import awsConfig from '@/src/aws-exports'

Amplify.configure(awsConfig)

export default ({ app }, inject) => {
  inject('graphql', (operation, vars = {}) => Amplify.API.graphql(graphqlOperation(operation, vars)))
}

只需要一种选项来用中文重新表达:
通过这样做,可以从Vue组件中

this.$graphql(...)

将可以被召唤出来了。

数据输出

我编写了一个简单的代码来输出保存在 DynamoDB 中的数据。
* default.vue→简单的主要布局
* index.vue→显示 Home.vue 组件的标题
* Home.vue→组件。将 DynamoDB 数据输出的代码切分出来。

<template lang="pug">
  v-layout(
    wrap
  )
    v-flex
      home
</template>

<script>
import Home from '~/components/Home'

export default {
  components: {
    Home
  },
  middleware: 'auth',
  data () {
  }
}
</script>

<template lang="pug">
  v-app
    v-toolbar(color="indigo" dark fixed app)
      v-toolbar-side-icon(@click.stop="drawer = !drawer")
      v-tabs(color="indigo")
        v-tab(nuxt to="/") OVERVIEW
        v-tab(nuxt to="/signup") Customer
        v-tab(nuxt to="/signin") SIGNIN
        v-tab(nuxt to="/housekeeping") HOUSE KEEPING
        v-tab(nuxt to="/reports") REPORTS

    v-content
      nuxt

    v-footer(color="indigo" app)
      span.white--text © 2017
</template>

<script>
export default {
  data: () => ({
    drawer: false
  })
}
</script>

<template lang="pug">

    v-container

      v-layout(
        row
        wrap
      )

        v-flex(
          xs12
          sm6
          md4
          lg4
          v-for="room in rooms"
          :key="room.name"
        )
          v-card.ma-3(
            flat
            v-show="checkRoom(room)"

          )

            v-card-title
              | {{ room.number }}
              v-spacer

               span(
                v-if="room.guestInfo"
               ) {{ room.guestInfo.name }}

</template>

<script>
import { listUserTypes } from '@/src/graphql/queries'
export default {
  data () {
    return {
      rooms: []
    }
  },

  created () {
    this.loadUserTypes()
  },

  methods: {
    async loadUserTypes () {
      const data = await this.$graphql(listUserTypes, {
        limit: 100
      })   
    }
  }
}
</script>

※UserType是表(table)的变量名。

本篇文章的目的是输出 DynamoDB 数据,因此将以 Home.vue 组件为中心进行解释。想要获取的数据表如下所示:

スクリーンショット 2019-11-26 22.15.40.png
スクリーンショット 2019-11-26 22.17.47.png

完成出力的步骤

1. 导入 list 查询

我想在list查询中获取全部数据,所以我会在query.js文件中导入listUserTypes。

import { listUserTypes } from '@/src/graphql/queries'

使用GraphQL查询将获取到的数据赋值给变量。

使用list查询获取的UserType表的数据将被赋值给rooms。


data () {
  return {
    rooms: []
  }
},

created () {
  this.loadUserTypes()
},

methods: {
  async loadUserTypes () {
    const user = await this.$graphql(listUserTypes, {
      limit: 100
    })
    this.rooms = user.data.listUserTypes.items
  }
}
    1. 通过created钩子,实例被创建后立即调用loadUserTypes方法。

loadUserTypes方法将查询到的数据赋值给存储在data中的rooms空数组。

スクリーンショット 2019-11-26 22.06.21.png

通过将定数user替换为data.listUserTypes.items,可以将12个数据赋值给rooms。

3. 付出努力

UI的界面如下所示。

スクリーンショット 2019-11-26 22.35.53.png

因为这样看起来无法忍受,所以我想稍作修改。
由于房间号是随机排列的,因此我想按照从101开始的顺序进行布置。
为此,我将使用sort方法。

在`loadUserTypes`方法中添加`sort`方法。

    async loadUserTypes () {
      const user = await this.$graphql(listUserTypes, {
        limit: 12
      })

      const result = user.data.listUserTypes.items
      result.sort(function (a, b) {
        if (a.number > b.number) {
          return 1
        } else {
          return -1
        }
      })
      this.rooms = result
    }

我們成功按照房間編號的順序進行了排列!

スクリーンショット 2019-11-26 22.36.53.png
スクリーンショット 2019-11-26 22.57.03.png
广告
将在 10 秒后关闭
bannerAds