无法导入 Apollo 解析器

Cannot import Apollo resolvers

我有一个 Apollo 查询:

// ./src/resolvers.js

const Movie = {
  id: (parent) => parent.id,
  name: (parent) => parent.name,
  tmdb_id: (parent) => parent.tmdb_id,
};

const Query = {
  movies: () => {
    return prisma.movie.findMany({});
  },
};

在我的仪表板组件中,我正在尝试 return 来自 Apollo 的数据:

// ./src/dashboard.tsx

const DashboardComponent = () => {
  const {loading, error, data} = useQuery(resolvers.Query.movies);

  ...
}

但是 TSlint 显示错误:

TS2345: Argument of type '() => PrismaPromise<Movie[]>' is not assignable to parameter of type 'DocumentNode | TypedDocumentNode<any, OperationVariables>'. Type '() => PrismaPromise<Movie[]>' is missing the following properties from type 'TypedDocumentNode<any, OperationVariables>': kind, definitions

我正在使用:

"prisma": "2.30.0",
"typescript": "^4.3.5",
"apollo-client": "^2.6.10",
"apollo-server": "^3.2.0",

useQuery() 接受类型为 DocumentNodequery 参数。您不能将解析器传递给它。

DocumentNode:

A GraphQL query document parsed into an AST by gql.

GraphQL 解析器用于解析 GraphQL 架构中定义的字段。在实际使用中,一般放在服务端,架设一个GraphQL服务器,以Database,RESTAPI作为数据源,通过HTTP服务。

GraphQL解析器放在数据生产端,消费者端通过构造DocumentNodeAST定义需要查询的字段

GraphQL只是定义了数据生产端和消费端之间的交换方式,与具体的上层通信协议HTTP、RPC等无关

Is GraphQL frontend or backend? and Does GraphQL use HTTP?

您应该像这样在客户端创建查询:

import { gql, useQuery } from '@apollo/client';

const QUERY_MOVIES = gql`
  query QueryMovies {
     movies {
       id
       name
     }
  }
`

// In React component
useQuery(QUERY_MOVIES);