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

278
Visualizações
nodo manual graphql.js manejo de errores, enmascaramiento de errores js como una respuesta válida 200 y montaje/uso del escalador

Dejo esto aquí para mí y para otros, ya que hay poca documentación sobre el uso de graphql.js fuera de apollo o express, lo uso en un lambda MVC, así que tengo que averiguar cómo manejar Graphql.js manualmente.

El método graphql de graphql.js tiene la costumbre de devolver cualquier error de cualquier tipo como una respuesta válida cuando se produce en cualquier punto desde el resolutor en adelante.

Probé el paquete graphql-errors y eso no funcionará debido a cómo se declaran los resolutores, ya que los pasamos al método graphql() después de intentar arrancar los envoltorios de resolución en graphql-errors. Pollo y huevo!

Pero hay una solución cuando se ejecuta manualmente, pasando el esquema, rootValue y más a graphql directamente, y se ejecuta simplemente envolviendo los rosolvers en una captura de prueba antes de entregarlos a rootValue, almacenando en caché el error.

 const { graphql, buildSchema } = require('graphql'); const GraphQLScalar = require('graphql-scalars'); const GraphqlAPISchema = require('../Schema/api.graphql'); // bootstrap graphql schema export const schema = buildSchema(GraphqlAPISchema); // map in any scalar types from schema, for graphql-scalers type (again little doc to explain how to do this Object.keys(GraphQLScalar.resolvers).filter((k) => schema._typeMap[k]).map((k) => Object.assign(schema._typeMap[k], GraphQLScalar.resolvers[k])); // map in query root values to models let error; // catch any resolver errors and cache them (as graphqljs masks all as valid response! bundling and exposing resolvers errors to users) const rootValue = { Item: async (args) => { try { return await (new (require('../Item.js'))()).graphql(args).then(([row]) => row)} catch (e) { error = e }}, Items: async (args) => { try { return await (new (require('../Item.js'))()).graphql(args)} catch (e) { error = e }} }; // if we threw error in resolvers... we need to re-throw it here for MVC to pick it up or it goes back as 200 masked and exposes all errors! GraphQL bundles errors as valid response! return graphql({source: request.body.query, variableValues: request.body.variables, schema, rootValue}).then((res) => { if (!error) return res; throw error; });

Este es un ejemplo de cómo mapearía en el mismo modelo a los resolutores de graphql una vez como una sola entidad y como una matriz de entidades, almacenando en caché cualquier error del modelo (carga diferida) en adelante, almacenando en caché desde el método de graphql y decidí si tirar o no (para que MVC haga lo que quiera)

el MVC es Cerberus MVC que se ejecuta localmente en SAM y se puede enviar a AWS lambda a través de la formación de nubes.

La falta de documentación en graphql.js es impactante, al usar escaladores no encontré nada que explique cómo montarlos manualmente sin usar express o apolllo, etc., por lo que nuevamente se incluye el montaje del escalador en este ejemplo para ayudar a alguien.

about 4 years ago · Juan Pablo Isaza
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