2017-02-06 2 views
2

Я использую apollographql/graphql-server. Ответы сервера выглядит следующим образом:Обработка ошибок Apollo GraphQL

{"data":{...},"errors":[{"message":"...","locations":...}]} 

У меня есть два вопроса:

  1. Я считаю, что я могу бросить или вернуть объект Error и будет выталкиваться в массив ошибок, формирующего ответ, но ответ отправляется, как только я это делаю. Как я могу вернуть более одной ошибки?

  2. Является ли массив ошибок допустимым для ошибок приложения или сервера, таких как ошибки? Должны ли данные проверки и проверки ошибок помещаться внутри объекта данных?

Заранее благодарен!

ответ

1
  1. Если вам нужно возвратить более одной ошибки ответа, вы, скорее всего, нужно создать массив ошибок самостоятельно, а затем, когда вы будете готовы, вернуть ошибки graphql. Я делаю что-то подобное в своем коде. Хотя большую часть времени, если я получаю сообщение об ошибке, я все равно хочу остановить его и вернуть проблему клиенту.

  2. Все, что находится за пределами типичного «счастливого пути», для вас - ошибки графа, вы хотите вернуть ошибку. Ваш клиентский код будет полагаться на эти данные, поэтому вы хотите, чтобы ваш клиент мог реагировать на неожиданные проблемы, которые происходят на сервере. Решенные или пустые результирующие наборы - это единственное, что возвращается как обычно и не выдает ошибок. Все остальное, отсутствующие параметры, ошибки базы данных и т. Д., Вы захотите вернуть ошибку.

Надеюсь, что это поможет! :)

+0

Спасибо за ваш ответ. 1) Я пытался бросить или возвратить массив ошибок или ошибок с массивом строк раньше, но не повезло. Вы знаете, как это сделать? 2) В обычной рутине я помещаю ошибки, попавшие в объект данных, потому что массив ошибок из ответа сервера кажется непригодным для ошибок, таких как проверка формы – James

0

Проверьте это: https://github.com/thebigredgeek/apollo-errors

С их ReadMe:

Создать некоторые ошибки:

import { createError } from 'apollo-errors'; 

export const FooError = createError('FooError', { 
    message: 'A foo error has occurred' 
}); 

Подключайте форматирования:

import express from 'express'; 
import bodyParser from 'body-parser'; 
import { formatError } from 'apollo-errors'; 
import { graphqlExpress } from 'apollo-server-express'; 
import schema from './schema'; 

const app = express(); 

app.use('/graphql', 
    bodyParser.json(), 
    graphqlExpress({ 
    formatError, 
    schema 
    }) 
); 

app.listen(8080) 

Бросьте некоторые ошибки:

import { FooError } from './errors'; 

const resolverThatThrowsError = (root, params, context) => { 
    throw new FooError({ 
    data: { 
     something: 'important' 
    } 
    }); 
} 
Смежные вопросы