GraphQL 中继返回一条记录
Posted
技术标签:
【中文标题】GraphQL 中继返回一条记录【英文标题】:GraphQL relay return one record 【发布时间】:2018-03-15 11:58:49 【问题描述】:我在我的项目中使用了 graphql-relay
在我的 grapgql 中运行此查询时:
viewer
boRelayCustomerInfo(_id:"59267769de82262d7e39c47c")
edges
node
id
我给出了这个错误:
"message": "arraySlice.slice is not a function"
我的查询代码是:
import
GraphQLID,
GraphQLNonNull,
from 'graphql'
import
connectionArgs,
connectionFromPromisedArray,
from 'graphql-relay'
import customerConnection from '@/src/schema/type/customer/CustomerType'
import CustomerModel, ObjectId from '@/src/db'
export default
type: customerConnection.connectionType,
args:
...connectionArgs,
_id:
type: new GraphQLNonNull(GraphQLID),
,
,
resolve: (_, args) => connectionFromPromisedArray(
CustomerModel.findOne(_id: ObjectId(args._id)),
args,
),
请告诉我们,如何在中继中只返回一条记录。
【问题讨论】:
【参考方案1】:如官方文档中所述graphql-relay-js
connectionFromPromisedArray 接受一个解析为数组的承诺
所以,这里的问题在于 connectionFromPromisedArray 方法中传递的第一个参数。
IE:
CustomerModel.findOne(_id: ObjectId(args._id))
其中 findOne 返回一个对象,而您需要使用 find 以数组形式获取响应。
问题代码:
resolve: (_, args) => connectionFromPromisedArray(
CustomerModel.findOne(_id: ObjectId(args._id)), // <=== Error
args,
),
问题的解决方案:
resolve: (_, args) => connectionFromPromisedArray(
CustomerModel.find(_id: ObjectId(args._id)), // <=== Solution
args,
),
希望对你有帮助:)
【讨论】:
以上是关于GraphQL 中继返回一条记录的主要内容,如果未能解决你的问题,请参考以下文章