我的 ObjectType 正在返回一个空对象 [重复]

Posted

技术标签:

【中文标题】我的 ObjectType 正在返回一个空对象 [重复]【英文标题】:My ObjectType is returning an empty object [duplicate] 【发布时间】:2020-05-29 14:53:03 【问题描述】:

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

这个工作,它控制台记录排名类型并且工作正常

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

这给了我“消息”的错误:“Rank.branch 的类型必须是输出类型,但得到:未定义。”

模型/关系:

分支模型:

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)

排名模型

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

【问题讨论】:

您是否尝试使用 rank.branch 解析 branch 字段,该字段正在解析中? @xadm 是的,因为 objectID 链接到 rank.branch。但是,当我 console.log BranchType 它在这个 rank.js 文件中返回 undefined 。当我需要它并在我的 user.js 文件中使用 console.log 时,它可以正常工作 如何通过读取相同的值来定义值(之前没有定义)? @xadm 我遇到的问题是 BranchType 未定义。否则一切都会奏效。出于某种原因,即使我正在导出 const BranchType 它在此特定文件中未定义。当我在另一个文件中需要它时,它工作正常。我只是不知道为什么它会在这个文件中未定义。如果我注释掉 Rank.branch 但 BranchType 仍然未定义,它会起作用 fields 可以使用返回对象的函数来代替对象。 fields: () => ( branch, ... ) 这会延迟函数内部代码的评估,直到它被调用。因此,例如,您可以在其中调用 require 以延迟其评估,从而避免循环需求。 【参考方案1】:

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

改变

const BranchType = require('./branch')

const  BranchType  = require('./branch')

【讨论】:

我试过了,它应该在代码中,我只是在编辑一些东西。当我这样做时,我收到此错误:“消息”:“Rank.branch 的类型必须是输出类型,但得到:未定义。”

以上是关于我的 ObjectType 正在返回一个空对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

findOne 返回一个空对象

是否可以在同一个对象中有一个 objectType

获取最后位置返回空对象引用错误

猫鼬中的 findOne 返回空对象,然后返回正确的对象

JsonView 返回空的 json 对象

SerializeObject 正在返回一个空对象