我的ObjectType返回一个空对象

时间:2020-02-13 20:01:53

标签: javascript node.js express graphql graphql-js

所以我有两种对象类型,我试图将它们包括在内以建立关系,其中一种有效,而其中一种仅返回一个空对象,我不知道为什么。

此方法有效,它会控制台记录等级类型并正常工作

const Rank = require('../model/RankModel')
const { RankType } = require('./rank')
console.log(RankType)

/**
 * Defines Branch Type
 */
const BranchType = new GraphQLObjectType({
  name: "Branch",
  fields: {
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    color: { type: GraphQLString },
    ranks: { 
      type: GraphQLList(RankType),
      resolve: async (branch) => {
        return await Rank.find({branch: branch.id})
      }
    }
  }
})
module.exports.BranchType = BranchType

这就是那个破

const Rank = require('../model/RankModel')
const Branch = require('../model/BranchModel')
const { BranchType } = require('./branch')

console.log(BranchType)
/**
 * Defines Rank Type
 */
const RankType = new GraphQLObjectType({
  name: "Rank",
  fields: {
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    shortHand: { type: GraphQLString },
    branch: { 
      type: BranchType,
      resolve: async (rank) => {
        return await Branch.findById(rank.branch)
      }
    }
  }
})
module.exports.RankType = RankType

这给我一个“消息”错误:“ Ranch.branch的类型必须是Output Type,但是得到:undefined。”

模型/关系:

BranchModel:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let branchSchema = new Schema({
  name: {
    type: String,
    required: true,
    unique: true
  },
  color: {
    type: String,
    required: true,
    unique: true
  },
  ranks: [{
    type: Schema.Types.ObjectId,
    ref: 'Rank'
  }]
});

module.exports = mongoose.model('Branch', branchSchema)

RankModel

const mongoose = require('mongoose')
const Schema = mongoose.Schema

let rankSchema = new Schema({
  name: {
    type: String,
    required: true,
    unique: true
  },
  shortHand: {
    type: String,
    required: true,
    unique: true
  },
  branch: {
    type: Schema.Types.ObjectId,
    ref: 'Branch'
  }
});

module.exports = mongoose.model('Rank', rankSchema);

回答!!!!!!

/**
 * Defines Rank Type
 */
const RankType = new GraphQLObjectType({
  name: "Rank",
  fields: () => ({
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    shortHand: { type: GraphQLString },
    branch: { 
      type: require('./branch').BranchType,
      resolve: async (rank) => {
        console.log(rank.branch)
        return await Branch.findById(rank.branch)
      }
    }
  })
})
module.exports.RankType = RankType

1 个答案:

答案 0 :(得分:-1)

在我看来,您需要像我需要RankType时那样解构BranchType,它基于我从您的module.exports中看到的内容

更改

const BranchType = require('./branch')

const { BranchType } = require('./branch')