Apollo客户订阅必须提供架构

时间:2017-04-01 15:19:26

标签: javascript node.js graphql apollo-client graphql-subscriptions

我不知道为什么会这样。 我正在收听订阅postAdded,每次我使用变异创建帖子时都会发布。

import React, { Component } from 'react'
import { graphql, gql } from 'react-apollo'

class App extends Component {
  componentDidMount() {
    this.props.subscribeToNewPosts()
  }

  render() {
    return (
      <div>
        <h1>Hello world</h1>
        {console.log(this.props)}
      </div>
    )
  }
}

const Query = gql`
  query Posts {
    posts {
      id
      title
      content
      author {
        firstName
        lastName
      }
    }
  }
`

const Subscription = gql`
  subscription postAdded {
    postAdded {
      id
      title
      content
      author {
        firstName
        lastName
      }
    }
  }
`

App = graphql(Query, {
  name: 'posts',
  props: props => {
    return {
      subscribeToNewPosts: () => {
        return props.posts.subscribeToMore({
          document: Subscription,
          updateQuery: (prev, { subscriptionData }) => {
            if(!subscriptionData.data) {
              return prev
            }

            const newPost = subscriptionData.data.postAdded

            console.log(newPost)

            return {
              ...prev,
              posts: [...prev.posts, newPost]
            }
          }
        })
      },
      posts: props.posts
    }
  }
})(App)

export default App

错误:

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,这很可能是服务器实施问题。错误可能是由graphql-tools抛出的,这是你的graphql终点。

在官方博客上关注Full-stack + GraphQL教程的第二部分时,发生了同样的事情。

虽然不一定是相同的情况,但我发生的事情是教程导出架构对象:export { schema },相当于export { schema: schema }而不是默认的常规导出,例如export default schema

在我的graphql服务器端点中,我使用import schema from './src/schema'导入这是错误的,因为架构被导出为子对象而不是默认导出。我的案例的正确导入应该是import { schema } from './src/schema'

TL; DR检查您的服务器代码,检查您的导出和导入语句。错误消息确实具有误导性,但很可能与模块导入/导出有关。

如果我们使用webpack编译而不是像教程中那样使用babel-node,可以避免或提供更明确的信息。