无法导入 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()
接受类型为 DocumentNode
的 query 参数。您不能将解析器传递给它。
DocumentNode
:
A GraphQL query document parsed into an AST by gql
.
GraphQL 解析器用于解析 GraphQL 架构中定义的字段。在实际使用中,一般放在服务端,架设一个GraphQL服务器,以Database,RESTAPI作为数据源,通过HTTP服务。
GraphQL解析器放在数据生产端,消费者端通过构造DocumentNode
AST定义需要查询的字段
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);
我有一个 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()
接受类型为 DocumentNode
的 query 参数。您不能将解析器传递给它。
DocumentNode
:
A GraphQL query document parsed into an AST by
gql
.
GraphQL 解析器用于解析 GraphQL 架构中定义的字段。在实际使用中,一般放在服务端,架设一个GraphQL服务器,以Database,RESTAPI作为数据源,通过HTTP服务。
GraphQL解析器放在数据生产端,消费者端通过构造DocumentNode
AST定义需要查询的字段
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);