GraphQL - vue-apollo 包,前端不输出查询

Posted

技术标签:

【中文标题】GraphQL - vue-apollo 包,前端不输出查询【英文标题】:GraphQL - vue-apollo package, not outputting query in the front end 【发布时间】:2018-11-12 11:41:36 【问题描述】:

我还在学习 GraphQL,在这个项目中,我只是想让一些查询显示在前端。我正在使用这个包,GitHub - Akryum/vue-apollo: ???? Apollo/GraphQL integration for VueJS,但还没有出现任何东西。我已经设法使用 React 让它工作了。我只是想对 Vue 做同样的事情。

我可以使用 graphiql 让查询在后端工作。我什至设置了快速服务器以使用 CORS,因此数据应该能够通过。我有一个 express 后端和一个 Vue 前端。

快递:server.js

const https = require('https');
const express = require('express');
const cors = require('cors');
const app = express();
const request = require("request");
const bodyParser = require('body-parser');
const  graphqlExpress, graphiqlExpress  = require('apollo-server-express');
const  makeExecutableSchema  = require('graphql-tools');

app.use(cors())

// Some fake data
const books = [
  
    title: "Harry Potter and the Sorcerer's stone",
    author: 'J.K. Rowling',
  ,
  
    title: 'Jurassic Park',
    author: 'Michael Crichton',
  ,
];

// The GraphQL schema in string form
const typeDefs = `
type Query 
  hello: String

`;

// The resolvers
const resolvers = 
  Query: 
    hello(root, args, context) 
      return "Hello world!"
    ,
  
;

// Put together a schema
const schema = makeExecutableSchema(
  typeDefs,
  resolvers,
);

// The GraphQL endpoint
app.use('/graphql', bodyParser.json(), graphqlExpress( schema ));

// GraphiQL, a visual editor for queries
app.use('/graphiql', graphiqlExpress( endpointURL: '/graphql' ));

// Start the server
app.listen(3000, () => 
  console.log('Go to http://localhost:3000/graphiql to run queries!');
);

Vue:main.js

    import Vue from 'vue'
    import App from './App.vue'
    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
      uri: 'http://localhost:3000/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(
      el: '#app',
      provide: apolloProvider.provide(),
      render: h => h(App),
    )

    Vue.config.productionTip = false



    new Vue(
      render: h => h(App)
    ).$mount('#app')

Vue:App.vue

<template>
  <div id="app">
    <img src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
    <BookList />
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue';
import BookList from './components/BookList.vue';

export default 
  name: 'app',
  components: 
    HelloWorld,
    BookList
  
;
</script>

<style>
#app 
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;

</style>

Vue:BookList.vue

<template>
<div>
    <h1>
        Book List
    </h1>
    <p>
      hello
    </p>
    </div>
</template>

<script>
import gql from 'graphql-tag';

export default 
  data() 
    return 
      // Initialize your apollo data
      hello: ''
    ;
  ,
  apollo: 
    // Simple query that will update the 'hello' vue property
    hello: gql`
      
        hello
      
    `
  
;
</script>

【问题讨论】:

【参考方案1】:

我想通了。我在 main.js 文件中安装了两次 Vue。第二个 vue 实例可能覆盖了第一个,并且它没有附加提供程序。

Vue: main.js 中删除此代码即可解决问题。

new Vue(
  render: h => h(App)
).$mount('#app')

【讨论】:

以上是关于GraphQL - vue-apollo 包,前端不输出查询的主要内容,如果未能解决你的问题,请参考以下文章

Vue-Apollo GraphQL Mutation 未正确调用

vue-apollo:GraphQL 查询仅在使用 <ApolloQuery> 标签时运行。永远不会在脚本代码中工作。 this.$apollo.queries 为空

如何从 vue-apollo 中访问 this.$route?

VUE UI create 抛 An error occurred vue-apollo.js:60 GraphQL error: ENOENT: no such file or directory

VUE UI create 抛 An error occurred vue-apollo.js:60 GraphQL error: ENOENT: no such file or directory

如何在 Vuepress 站点中使用 vue-apollo?