GraphQL中继返回一条记录

时间:2017-10-04 07:08:23

标签: node.js graphql graphql-relay

我在项目中使用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 个答案:

答案 0 :(得分:1)

正如官方文件graphql-relay-js

所述
  

connectionFromPromisedArray 接受解析为数组的承诺

所以,这里的问题是在 connectionFromPromisedArray 方法中传递的第一个参数。 即: resolve: (_, args) => connectionFromPromisedArray( CustomerModel.findOne({_id: ObjectId(args._id)}), // <=== Error args, ),

其中 findOne 会返回一个对象,而您需要使用 find 将响应作为数组获取。

问题代码:

 resolve: (_, args) => connectionFromPromisedArray(
    CustomerModel.find({_id: ObjectId(args._id)}), // <=== Solution
    args,
  ),

解决问题的方法:

{{1}}

希望有所帮助:)