Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

272
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda