DEV Community

Cover image for Graphqlwithapolloclient
nkiran008
nkiran008

Posted on

Graphqlwithapolloclient

Hi, I'm new to Vue Js. trying to integrate graphql with apollo client. always getting below error

[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'defaultClient' of undefined"

found in

--->  at src/components/Admin/Author.vue
        at src/App.vue
         


TypeError: Cannot read property 'defaultClient' of undefined
    at DollarApollo.getClient (vue-apollo.esm.js?522d:1235)
    at DollarApollo.mutate (vue-apollo.esm.js?522d:1273)
    at VueComponent.createAuthor (Author.vue?2edc:54)
    at submit (eval at ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"46563e88-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/Admin/Author.vue?vue&type=template&id=ab0469ca& (app.js:933), :21:28)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at HTMLFormElement.invoker (vue.runtime.esm.js?2b0e:2179)
    at HTMLFormElement.original._wrapper (vue.runtime.esm.js?2b0e:6917)
main.js

import Vue from 'vue'
import App from './App.vue'

import VueApollo from "vue-apollo";
import ApolloClient from "apollo-client";
import { HttpLink } from "apollo-link-http";
import { InMemoryCache } from "apollo-cache-inmemory";
import VueRouter from 'vue-router';

import SignUp from '@/components/Admin/SignUp'
import Login from '@/components/Admin/Login'
import Author from '@/components/Admin/Author'


Vue.use(VueRouter);

Vue.config.productionTip = false
const getHeaders = () => {
  const headers = {};
  const token = window.localStorage.getItem('apollo-token');
  if (token) {
    headers.authorization = `Bearer ${token}`;
  }
  return headers;
};
// Create an http link:
const link = new HttpLink({
  uri: 'http://localhost:8080/apis/graphql',
  fetch,
  headers: getHeaders()
});
export const client = new ApolloClient({
  link: link,
  cache: new InMemoryCache({
    addTypename: true
  })
});

export const apolloProvider = new VueApollo({
  defaultClient: client,
});


const router = new VueRouter({
  routes: [
    { path: '/signup', name: 'SignUp', component: SignUp },
    { path: '/login', name: 'Login', component: Login },
    { path: '/createAuthor', name: 'createAuthor', component: Author }
  ]
})

new Vue({
  apolloProvider,
  router,
  render: h => h(App),
}).$mount('#app')

Vue.use(VueApollo);

Author.vue


    
        
            
                

Create Author

Name Age

import { CREATEAUTHOR_MUTATION } from '@/graphql' export default { name: 'createAuthor', data () { return { name: '', age: '' } }, methods: { createAuthor () { this.$apollo .mutate({ mutation: CREATEAUTHOR_MUTATION, variables: { name: this.name, age: this.age } }) .then(response => { console.log(response); // redirect to login page this.$router.replace('/login') }) } } }
src/graphql.js 


import gql from 'graphql-tag'
export const CREATEAUTHOR_MUTATION = gql`mutation CREATEAUTHORMutation($name: String!, $age: Integer!) {
    createAuthor(
            name: $name,
            age: $age
        ) {
            id
            name
        }
    }`

Top comments (0)