Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

271
Visualizações
Las dependencias circulares no se pueden dividir en sus respectivos archivos

Hay dos objetos, Usuarios y Empresa, cada usuario trabaja para una empresa, por lo que tiene un identificador de empresa al que se hace referencia a través de GraphQL. Del mismo modo, cada Empresa tiene una lista de usuarios que trabajan para ellos.

Aquí está el código:

empresa.js

 const UserType = require('./user') const CompanyType = new GraphQLObjectType({ name: 'Company', fields: () => ({ id: { type: GraphQLString }, name: { type: GraphQLString }, users: { type: new GraphQLList(UserType), --------> Error:Expected {} to be a GraphQL type. Expected UserType to be a GraphQL type. async resolve(parentValue, args) { return await axios( `http://localhost:3001/company/${parentValue.id}/users` ).then(({ data }) => data) }, }, }), })

usuario.js

 const CompanyType = require('./company') const UserType = new GraphQLObjectType({ name: 'User', fields: () => ({ id: { type: GraphQLString }, age: { type: GraphQLInt }, name: { type: GraphQLString }, company: { type: CompanyType, async resolve(parentValue, args) { console.log(parentValue) return await axios( `http://www.localhost:3001/company/${parentValue.companyId}` ).then((response) => response.data) }, }, }), })

rootquery.js

 const UserType = require('./user') const CompanyType = require('./company') const RootQuery = new GraphQLObjectType({ name: 'RootQueryObjectType', fields: { user: { type: UserType, args: { id: { type: GraphQLString }, }, resolve: async (parentValue, args) => { return await axios(`http://localhost:3001/users/${args.id}`).then( ({ data }) => data ) }, }, company: { type: CompanyType, args: { id: { type: GraphQLString }, }, resolve: async (parentValue, args) => { return await axios(`http://localhost:3001/company/${args.id}`).then( ({ data }) => data ) }, }, }, })

El error es comprensible debido a las dependencias circulares. En caso de que coloque el código de user.js y company.js en rootquery.js, no hay ningún error. ¿Hay alguna manera de separar estos archivos sin encontrar un error de objeto vacío?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Después de investigar un poco, descubrí que siempre que necesite usar una dependencia circular, debe requerirla en ese punto de su código, en lugar de requerirla como una variable. P.ej

Previamente:

 const UserType = require('./user') ---> This was null/empty as it wasn't yet created const CompanyType = new GraphQLObjectType({ name: 'Company', fields: () => ({ id: { type: GraphQLString }, name: { type: GraphQLString }, users: { type: new GraphQLList(UserType), --------> Error:Expected {} to be a GraphQL type. Expected UserType to be a GraphQL type. async resolve(parentValue, args) { return await axios( `http://localhost:3001/company/${parentValue.id}/users` ).then(({ data }) => data) }, }, }), })

Para superar este problema, necesité el módulo necesario exactamente donde se requiere

Solución:

 const UserType = new GraphQLObjectType({ name: 'User', fields: () => ({ name: { type: GraphQLString }, id: { type: GraphQLString }, age: { type: GraphQLInt }, company: { **type: require('./company'),** -----> This is where a dynamic import is being made async resolve(parentValue, args) { return await axios( `http://localhost:3001/users/${parentValue.id}` ).then(({ data }) => data) }, }, }), })
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda