graphQL在前端vue中使用實例代碼
上回說到,那個請求攔截的一個過程,我上次不會看官網(wǎng)教程,這次,終于有了新的發(fā)現(xiàn)。
之前介紹過vue中使用GraphQL的實例代碼,喜歡的朋友可以點擊查看。
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/', // 請求選項 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:{ }, })
因為網(wǎng)速問題,我就暫時的探索到這兒。
前幾天的網(wǎng)絡(luò)出現(xiàn)了問題,然后發(fā)現(xiàn)我前端作為學(xué)習(xí)的這個https://countries.trevorblades.com/地址,出現(xiàn)了變化,也就是UI界面人家可能重新采用了一個。
變成了這種效果,可能是我網(wǎng)絡(luò)這邊有問題,請求的時候有點延遲。
然后好像對部分請求類型做了補(bǔ)充和優(yōu)化。
前面學(xué)習(xí)了graphql的概念,graphql的部分語法,以及基礎(chǔ)查詢,帶參數(shù)的查詢,攔截器用法,錯誤處理。接下來深入學(xué)習(xí)一下,上傳json字符串,和如何去上傳和請求流式文件并轉(zhuǎn)化。
目前為止,我們只討論過簡單的字符串等標(biāo)量值作為參數(shù)傳遞給字段,但是你也能很容易地傳遞復(fù)雜對象。這在變更(mutation)中特別有用,因為有時候你需要傳遞一整個對象作為新建對象。在 GraphQL schema language 中,輸入對象看上去和常規(guī)對象一模一樣,除了關(guān)鍵字是 input 而不是 type。
為了方便演示學(xué)習(xí),我又找了一個graphql的接口
https://hasura.io/learn/graphql/graphiql
這里的話,可以使用一些選項的配置,幫助我們快速直觀的理解文檔描述。查詢這樣的數(shù)據(jù)。
首先大體學(xué)習(xí)一哈:
這里有個特別好的地方就是有Authorization
的認(rèn)證,這時候就得按照人家的要求來寫了。那就可以通過請求攔截器來加上這個認(rèn)證即可。所以這里的兩個錯誤處理就特別的好了。
所以就是和配置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_m4zmvbNg1YOvZWwyQwHrRMZBadmM3WkQ4wkJBDO9YbWSrqh2XCeTNpRYMkcZ07_8gyUx77WKoXHSRoe3tZJjvBTgVleyJTHqYET-aI46pi7mamuZq7BuAHPZ-uKKBmErrhNGhari_X_Le9tNjJPfTGNuGovsXW3hK_TYiRC1eL5Ic_ekO0UDey9ph2qA05JJdJPwN2ZqFhwRQ3Cgdn0kIUPB_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 } }` }) }
咋們的第三波的探索就此展開。。。。。。
到此這篇關(guān)于graphQL在前端vue中使用過程的文章就介紹到這了,更多相關(guān)graphQL vue使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue富文本框(插入文本、圖片、視頻)的使用及問題小結(jié)
這篇文章主要介紹了vue富文本框(插入文本、圖片、視頻)的使用及問題小結(jié),需要的朋友可以參考下2018-08-08Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁應(yīng)用
這篇文章主要給大家介紹了關(guān)于Vue CLI3基礎(chǔ)學(xué)習(xí)之pages構(gòu)建多頁應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Vue CLI3具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06vue中electron框架自定義外部配置文件的配置與讀取辦法
使用Electron開發(fā)本地跨平臺的本地程序時,有時需要添加一些程序的配置文件,下面這篇文章主要給大家介紹了關(guān)于vue中electron框架自定義外部配置文件的配置與讀取的相關(guān)資料,需要的朋友可以參考下2023-12-12vue 監(jiān)聽 Treeselect 選擇項的改變操作
這篇文章主要介紹了vue 監(jiān)聽 Treeselect 選擇項的改變操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08使用VueCli3+TypeScript+Vuex一步步構(gòu)建todoList的方法
這篇文章主要介紹了使用VueCli3+TypeScript+Vuex一步步構(gòu)建todoList的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07