Пользовательские ошибки с помощью graphql-js и экспресс

Насколько я понимаю, вы можете создавать собственные ошибки в graphql и graphql-express.

https://codeburst.io/custom-errors-and-error-reporting-in-graphql-bbd398272aeb

Я создал настраиваемую реализацию ошибки, но добавленные свойства теряются по пути вниз и никогда не достигают функции formatError, я что-то упускаю или это ошибка?

Пример кода:

var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema, GraphQLError } = require('graphql');

// i tried extending just from Error with the same results
class CustomError extends GraphQLError {
  constructor(message) {
    super(message);
    this.customField = 'nopesies';
  }
}

var schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// The root provides a resolver function for each API endpoint
var root = {
  hello: () => {
    const err = new CustomError('i am special')
    console.info(err.customField); // => nopesies
    throw err
  },
};

var app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
  formatError(err) {
      console.info(err.customField); // => undefined
      return {
        message: err.message,
        thisIsFine: 'grmpf',
        locations: err.locations,
        path: err.path,
        customField: err.customField,
      };
    },
}));
app.listen(4000);
console.info('Running a GraphQL API server at localhost:4000/graphql');

Запрос-URL:

http: // localhost: 4000 / graphql? query =% 7B% 0A% 20% 20hello% 0A% 7D

Package.json:

{
  "name": "custom-graphql-errors",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "express": "^4.16.3",
    "express-graphql": "^0.6.12",
    "graphql": "^0.13.2"
  }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 061
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда возникает исключение, ошибка снова переносится в GraphQLError.

return new _GraphQLError.GraphQLError(originalError && originalError.message, originalError && originalError.nodes || nodes, originalError && originalError.source, originalError && originalError.positions, path, originalError);

Итак, ваша фактическая ошибка находится в originalError. Итак, если я изменю вашу консоль на

  console.info(err.originalError.customField); // => undefined

Я получаю правильный вывод

Error custom fields

Другие вопросы по теме