【问题标题】:GraphQL relay return one recordGraphQL 中继返回一条记录
【发布时间】: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,
  ),
}

请告诉我们,如何在中继中只返回一条记录。

【问题讨论】:

    标签: node.js graphql graphql-relay


    【解决方案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,
      ),
    

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2018-09-13
      • 2017-10-14
      相关资源
      最近更新 更多