在vue項目中集成graphql 即vue-ApolloClient

1.什麼是graphql
GraphQL 是一個用於 API 的查詢語言,是一個使用基於類型系統來執行查詢的服務端運行時
下圖展現graphql所處的位置
clipboard.png
2.優勢前端

1.GraphQL API 有強類型 schema
    GraphQL schema是強類型的,可以使用SDL(GraphQL Schema Definition Language)來定義。好比,能夠使用構建工具驗證API請求,編譯時檢查API調用可能發生的錯誤
2.按需獲取 
    在不添加後端接口的前提下減小沒必要要的字段,作到前端自主訂閱字段

3.使用 vue集成graphqlvue

1.安裝vue腳手架 npm install -g vue-cli 
2.安裝vue-apollo客戶端 vue-apollo graphql apollo-client apollo-link apollo-link-http apollo-cache-inmemory graphql-tag 
3.webpack.base.conf.js 安裝加載器加載graphql後綴文件
    {
        test: /\.(graphql|gql)$/,
        exclude: /node_modules/,
        loader: 'graphql-tag/loader'
     },

4.main.js 添加
    import { ApolloClient } from 'apollo-client'
    import { HttpLink } from 'apollo-link-http'
    import { InMemoryCache } from 'apollo-cache-inmemory'
    import VueApollo from 'vue-apollo'

    const httpLink = new HttpLink({
       // You should use an absolute URL here
       //config.js 代理設置
       // '/graphql': {
       //         target: "http://eshipe.net:3000/graphql",
       //         changeOrigin: true,
       //         pathRewrite: {
       //            '^/graphql': '/graphql'
       //         }
       //     },
      uri: '/graphql',//訪問地址,在這裏使用代理
    })

    // Create the apollo client
    const apolloClient = new ApolloClient({
      link: httpLink,
      cache: new InMemoryCache(),
      connectToDevTools: true,
    })

    // Install the vue plugin
    Vue.use(VueApollo)
    const apolloProvider = new VueApollo({
        defaultClient: apolloClient,
    })

    new Vue({
        router,
        store,
        provide: apolloProvider.provide(),//註冊全局組件
    }).$mount('#app')
    
5.添加search.graphql文件
    //定義查詢
    query q_user($id: Int){
      User(id: $id){
        id
        address
        name
      }
    }
    
6.具體的vue組件中
    1.import gql from "graphql-tag";
    2.import {q_user} from'search.graphql'
    3. 具體方法中使用
      this.$apollo.query({
          query: q_user,
          variables: {
            id: 1,
          },
      }).then(res => {
          console.log(res)
      }).catch(err => {
          console.log(err)
      })

4.可能遇到的問題node

1.npm版本問題
    解決思路:npm版本回退 npm install -g npm@4.6.1
相關文章
相關標籤/搜索