溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

graphQL怎么在前端vue中使用

發(fā)布時(shí)間:2023-03-24 15:36:58 來源:億速云 閱讀:107 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“graphQL怎么在前端vue中使用”,在日常操作中,相信很多人在graphQL怎么在前端vue中使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”graphQL怎么在前端vue中使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

graphQL的interceptors(請求攔截器)

import ApolloClient from 'apollo-boost';


const apolloClient = new ApolloClient({
  // 你需要在這里使用絕對路徑
  uri: 'https://countries.trevorblades.com/',
  // headers:{"Authorization":"Basic aW5zaWdodHM6MTIz","content-type":"application/json"},
  request:(operation)=>{
    // 繼續(xù)上次的探索之旅,每次請求之前執(zhí)行這樣的代碼
    console.log("before=>",operation);
    // 每次請求都會執(zhí)行這個攔截器,可以設(shè)置請求頭
    operation.setContext({
      headers:{
        Authorization:"Basic aW5zaWdodHM6MTIz"
      }
    })
    console.log("after=>",operation.getContext().headers);
  },
  onError:(e)=>{
    // 失敗錯誤信息打印
    console.log("err=>",e)
  },
  clientState:{
    
  },
})

export default apolloClient;

錯誤處理

如果請求失敗,這里的情況也會分為兩種。
第一,可能是graphql的語法錯誤導(dǎo)致的請求。
第二,可能是networkError導(dǎo)致的錯誤,語法錯誤。

const apolloClient = new ApolloClient({
  // 你需要在這里使用絕對路徑
  uri: 'https://countries.trevorblades.com/',
  // 請求選項(xiàng)
  fetchOptions: {
    credentials: 'include',//是否包含憑證
  },
  request:(operation)=>{
    operation.setContext({
      headers:{
        Authorization:"Basic aW5zaWdodHM6MTIz",
        contentType:"application/json"
      }
    })
  },
  onError:({ graphQLErrors, networkError })=>{
    if (graphQLErrors) {
     console.log("graphQLErrors");// 失敗錯誤信息打印
    }
    if (networkError) {
      console.log("networkError");
    }
    
  },
  clientState:{
    
  },
})

因?yàn)榫W(wǎng)速問題,我就暫時(shí)的探索到這兒。
前幾天的網(wǎng)絡(luò)出現(xiàn)了問題,然后發(fā)現(xiàn)我前端作為學(xué)習(xí)的這個https://countries.trevorblades.com/地址,出現(xiàn)了變化,也就是UI界面人家可能重新采用了一個。

graphQL怎么在前端vue中使用

變成了這種效果,可能是我網(wǎng)絡(luò)這邊有問題,請求的時(shí)候有點(diǎn)延遲。
然后好像對部分請求類型做了補(bǔ)充和優(yōu)化。

前面學(xué)習(xí)了graphql的概念,graphql的部分語法,以及基礎(chǔ)查詢,帶參數(shù)的查詢,攔截器用法,錯誤處理。接下來深入學(xué)習(xí)一下,上傳json字符串,和如何去上傳和請求流式文件并轉(zhuǎn)化。

目前為止,我們只討論過簡單的字符串等標(biāo)量值作為參數(shù)傳遞給字段,但是你也能很容易地傳遞復(fù)雜對象。這在變更(mutation)中特別有用,因?yàn)橛袝r(shí)候你需要傳遞一整個對象作為新建對象。在 GraphQL schema language 中,輸入對象看上去和常規(guī)對象一模一樣,除了關(guān)鍵字是 input 而不是 type。

為了方便演示學(xué)習(xí),我又找了一個graphql的接口
https://hasura.io/learn/graphql/graphiql

graphQL怎么在前端vue中使用

這里的話,可以使用一些選項(xiàng)的配置,幫助我們快速直觀的理解文檔描述。查詢這樣的數(shù)據(jù)。

graphQL怎么在前端vue中使用

首先大體學(xué)習(xí)一哈:
這里有個特別好的地方就是有Authorization的認(rèn)證,這時(shí)候就得按照人家的要求來寫了。那就可以通過請求攔截器來加上這個認(rèn)證即可。所以這里的兩個錯誤處理就特別的好了。

graphQL怎么在前端vue中使用

所以就是和配置axios一樣,先來配置好這個二次封裝的(Graphql):

import ApolloClient from 'apollo-boost';
import store from '@/store';

const apolloClient = new ApolloClient({
  uri: 'https://hasura.io/learn/graphql',
  fetchOptions: {
    credentials: 'include',//是否包含憑證
  },
  request:(operation)=>{    
    operation.setContext({
      headers:{
        Authorization:"Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ik9FWTJSVGM1UlVOR05qSXhSRUV5TURJNFFUWXdNekZETWtReU1EQXdSVUV4UVVRM05EazFNQSJ9.eyJodHRwczovL2hhc3VyYS5pby9qd3QvY2xhaW1zIjp7IngtaGFzdXJhLWRlZmF1bHQtcm9sZSI6InVzZXIiLCJ4LWhhc3VyYS1hbGxvd2VkLXJvbGVzIjpbInVzZXIiXSwieC1oYXN1cmEtdXNlci1pZCI6ImF1dGgwfDY0MGZkYTc1MjE5MjBmOGQzNDJiODA0YiJ9LCJuaWNrbmFtZSI6IjIzNjgyMzU1NDQiLCJuYW1lIjoiMjM2ODIzNTU0NEBxcS5jb20iLCJwaWN0dXJlIjoiaHR0cHM6Ly9zLmdyYXZhdGFyLmNvbS9hdmF0YXIvODA2YmJhMzNjYjUxNzg2MmE2M2UwMDAwM2Q4ZmIwZTc_cz00ODAmcj1wZyZkPWh0dHBzJTNBJTJGJTJGY2RuLmF1dGgwLmNvbSUyRmF2YXRhcnMlMkYyMy5wbmciLCJ1cGRhdGVkX2F0IjoiMjAyMy0wMy0yMVQwODozOTozNC43MTBaIiwiaXNzIjoiaHR0cHM6Ly9ncmFwaHFsLXR1dG9yaWFscy5hdXRoMC5jb20vIiwiYXVkIjoiUDM4cW5GbzFsRkFRSnJ6a3VuLS13RXpxbGpWTkdjV1ciLCJpYXQiOjE2NzkzODc5NzUsImV4cCI6MTY3OTQyMzk3NSwic3ViIjoiYXV0aDB8NjQwZmRhNzUyMTkyMGY4ZDM0MmI4MDRiIiwiYXRfaGFzaCI6IkpFZHZ0RFc1dnlhdnZ0TjNXZDliWXciLCJzaWQiOiJwT0l1Z2lWc1U1dTRNMGdMMHZmNWVZOTFnRi1Ma3hEQiIsIm5vbmNlIjoiQXFrSGRteURLaVFST3BZaWFmcTVlUXlLNW9pSH5KS3kifQ.A3LKFKBF0QFaNXPfUjr3ku8seevODVagp1hRkBN8SDN_m4zmvbNg1YOvZWwyQwHrRMZBadmM3WkQ4wkJBDO9YbWSrqh3XCeTNpRYMkcZ07_8gyUx77WKoXHSRoe3tZJjvBTgVleyJTHqYET-aI46pi7mamuZq7BuAHPZ-uKKBmErrhNGhari_X_Le9tNjJPfTGNuGovsXW3hK_TYiRC1eL5Ic_ekO0UDey9ph3qA05JJdJPwN2ZqFhwRQ3Cgdn0kIUPB_dIZFn2aD_PF78jdGGyUjFEES9xd-MbNfKpphB0lknUSTIcP0SyckVLmi0WW1CawAdHZCZke6KQs5QsKWw",
        contentType:"application/json"
      }
    })
  },
  onError:({ graphQLErrors, networkError })=>{
    if (graphQLErrors) {
     console.log("graphQLErrors:",graphQLErrors[0].message);
    }
    if (networkError) {
      console.log("networkError:",networkError);
    } 
  },
})

export default apolloClient;

在代碼中使用這個接口。

import gql from 'graphql-tag'
import apolloClient from './graphql'

export function one(){
    return apolloClient.query({
      query:gql`query{
        users(limit: 5) {
          name
          id
        }
      }`
    })
}

graphQL怎么在前端vue中使用

到此,關(guān)于“graphQL怎么在前端vue中使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI