Ecmascript 6 GraphQL中的自定义类型

Ecmascript 6 GraphQL中的自定义类型,ecmascript-6,graphql,graphql-js,Ecmascript 6,Graphql,Graphql Js,我正在使用。我想在其中实现一对多关联。我有两种类型用户和办公室。一个用户有多个办公室 用户类型: var graphql = require('graphql'); const userType = new graphql.GraphQLObjectType({ name: 'user', fields :()=>{ var officeType=require('./officeSchema'); return { _id: { type: graphql.GraphQLID

我正在使用。我想在其中实现一对多关联。我有两种类型用户办公室。一个用户有多个办公室

用户类型:

var graphql = require('graphql');
const userType = new graphql.GraphQLObjectType({
name: 'user',
fields :()=>{
var officeType=require('./officeSchema');
return {
  _id: {
    type: graphql.GraphQLID
  },
  name: {
    type: graphql.GraphQLString
  },
  age: {
    type: graphql.GraphQLString
  },
  office:{
    type:officeType
  }
};
}
 });
module.exports=userType;
const officeInputType = new graphql.GraphQLInputObjectType({
name: 'officeinput',
fields: () => {
    return {
        room: {
            type: graphql.GraphQLString
        },
        location: {
            type: graphql.GraphQLString
        }
    }
 }
});
const userInputType = new graphql.GraphQLInputObjectType({
name: 'userinput',
fields: () => {
    return {
        name: {
            type: graphql.GraphQLString
        },
        age: {
            type: graphql.GraphQLString
        }
    }
  }
});
办公模式:

const officeType = new graphql.GraphQLObjectType({
name: 'office',
fields:()=> {
var userType = require('./userSchema');
return {
  _id: {
    type: graphql.GraphQLID
  },
  room: {
    type: graphql.GraphQLString
  },
  location: {
    type: graphql.GraphQLString
  },
  users: {
    type: new graphql.GraphQLList(userType),
    resolve: (obj,{_id}) => {
     fetch('http://0.0.0.0:8082/office/user/'+obj._id, {
          method: "GET",
          headers: {
            'Content-Type': 'application/json'
          }
        })
        .then(function(res) {return res}); 
  }
  }
 };
 }
});
现在变异代码如下:

const Adduser = {
type: userType,
args: {
    name: {
        type: graphql.GraphQLString
    },
    age: {
        type: graphql.GraphQLString
    }

},
resolve: (obj, {
    input
}) => {

}
};
const Addoffice = {
type: OfficeType,
args: {
     room: {
            type: graphql.GraphQLString
        },
        location: {
            type: graphql.GraphQLString
        },
        users: {
            type: new graphql.GraphQLList(userInputType)
        }
},
resolve: (obj, {
    input
}) => {

}
};
const Rootmutation = new graphql.GraphQLObjectType({
name: 'Rootmutation',
fields: {
    Adduser: Adduser,
    Addoffice: Addoffice
}
});
此代码正在抛出错误,如下所示

Rootmutation.Addoffice(用户:)参数类型必须是输入类型,但得到的却是:[user]。

我想在数据库中添加实际字段以及相关表的字段,但无法解决问题

更新:

var graphql = require('graphql');
const userType = new graphql.GraphQLObjectType({
name: 'user',
fields :()=>{
var officeType=require('./officeSchema');
return {
  _id: {
    type: graphql.GraphQLID
  },
  name: {
    type: graphql.GraphQLString
  },
  age: {
    type: graphql.GraphQLString
  },
  office:{
    type:officeType
  }
};
}
 });
module.exports=userType;
const officeInputType = new graphql.GraphQLInputObjectType({
name: 'officeinput',
fields: () => {
    return {
        room: {
            type: graphql.GraphQLString
        },
        location: {
            type: graphql.GraphQLString
        }
    }
 }
});
const userInputType = new graphql.GraphQLInputObjectType({
name: 'userinput',
fields: () => {
    return {
        name: {
            type: graphql.GraphQLString
        },
        age: {
            type: graphql.GraphQLString
        }
    }
  }
});
1-添加的GraphQlinputObject类型:

var graphql = require('graphql');
const userType = new graphql.GraphQLObjectType({
name: 'user',
fields :()=>{
var officeType=require('./officeSchema');
return {
  _id: {
    type: graphql.GraphQLID
  },
  name: {
    type: graphql.GraphQLString
  },
  age: {
    type: graphql.GraphQLString
  },
  office:{
    type:officeType
  }
};
}
 });
module.exports=userType;
const officeInputType = new graphql.GraphQLInputObjectType({
name: 'officeinput',
fields: () => {
    return {
        room: {
            type: graphql.GraphQLString
        },
        location: {
            type: graphql.GraphQLString
        }
    }
 }
});
const userInputType = new graphql.GraphQLInputObjectType({
name: 'userinput',
fields: () => {
    return {
        name: {
            type: graphql.GraphQLString
        },
        age: {
            type: graphql.GraphQLString
        }
    }
  }
});
2-在AddOffice中添加了userinputtype而不是usertype。

现在错误是

 Rootmutation.Addoffice(user:) argument type must be Input Type but got: userinput.

问题是您提供了
userType
作为
Addoffice
变量类型之一
userType
不能是参数类型。相反,您必须使用输入类型

有两种对象类型:输出类型和输入类型。您的
userType
officeType
输出类型。您需要使用
GraphQLInputObjectType
[]创建输入类型。它可能会有非常相似的领域。您可以将其用作参数字段的类型

const userInputType = new graphql.GraphQLInputObjectType({
  name: 'UserInput',
  fields () => {
    return {
      _id: {
        type: graphql.GraphQLID
      },
      // ...
    };
  }
});

根据你的建议更改了代码。请看看我现在做错了什么?