在vue中使用graphql

记录在vue中使用graphql踩过的坑

安装依赖

首先我们保证已经有了一个vue项目,输入以下命令

npm install --save vue-apollo graphql apollo-client apollo-link apollo-link-http apollo-cache-inmemory graphql-tag

引入

创建apollo.js并输入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
import {ApolloLink} from 'apollo-link'
// 与 API 的 HTTP 连接
const httpLink = createHttpLink({
// 你需要在这里使用绝对路径
uri: process.env.VUE_APP_BASEURL + 'graphql',
})
const middlewareLink = new ApolloLink((operation, forward) => {
let token = '';
//配置token验证
let api_token = JSON.parse(sessionStorage.getItem('api_token')!)
if (api_token) {
token = api_token
}
operation.setContext({
headers: {
Authorization: `Bearer ${token}` || null
}
})
return forward(operation)
})
// 缓存实现
const cache = new InMemoryCache()
// 创建 apollo 客户端
export const apolloClient = new ApolloClient({
link: middlewareLink.concat(httpLink),
cache,
})

然后在main.js中引入

1
2
3
4
5
6
7
import * as apollo from './plugins/apollo'
import VueApollo from 'vue-apollo'

Vue.use(VueApollo)
const apolloProvider = new VueApollo({
defaultClient: apollo.apolloClient,
})

使用 apolloProvider 选项将它添加到你的应用程序

1
2
3
4
5
6
7
8
new Vue({
router,
vuetify,
i18n,
store,
apolloProvider,
render: h => h(App)
}).$mount('#app');

使用

在我们需要使用graphql的页面引入gql

import gql from 'graphql-tag'

然后创建一个js文件query.js用来编写查询语句,并在我们使用graphql的页面引入

import * as sql from './query'

query.js中添加查询代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
import gql from 'graphql-tag'
export var report1 = gql `query($id: ID!){
contracts(first:10,id:$id){
data{
id
address
contract_no
order{
contract_id
}
}
}
}`

然后回到我们需要使用apollo的页面,使用如下方法进行查询

1
2
3
4
5
6
7
8
9
10
11
this.$apollo.query({
query: sql.report1,
variables: {
id: 195,
},
fetchPolicy:"no-cache",//禁止缓存
}).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
文章作者: Joker
文章链接: https://qytayh.github.io/2020/05/%E5%9C%A8vue%E4%B8%AD%E4%BD%BF%E7%94%A8graphql/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker's Blog