2017-01-18 8 views
0

Я концептуально застрял в graphsql (используя graphql-js).ошибки графа и сообщения о состоянии в graphql-js

Давайте скажем пользователь API отправляет запрос и базы данных сервера вниз, и я хотел бы вернуть эту информацию в качестве ошибки в в списке

data { errors } 

.

Как я могу получить доступ к объекту ошибок в данных и вытолкнуть мои собственные сообщения об ошибках (например, об отключении сервера базы данных)?

Следующее, что мне интересно, - это добавить дополнительный объект сообщения к объекту данных.

Предположим, пользователь запросил элемент базы данных по идентификатору (например, конкретной учетной записи), и этот элемент не существует. Теперь я хотел бы вернуть что-то вроде этого:

{ 
    data: { 
     messages: [{status: "failure", message: "This account does not exist"}] 
    } 
} 

Как бы сделать это, и я бы должен определить сообщения, также как тип?

ответ

0

Единственный способ получить errors и messages поля появляться внутри data свойство ответа GraphQL включать их в системе типа вашей GraphQL схемы и явно задать для них от клиента. Однако, если вы хотите, чтобы пользовательские поля и messages были возвращены по каждому запросу независимо от того, спросил ли клиент их или нет, вы можете включить их за пределами свойства data.

Например, если вы используете express-graphql, он обеспечивает возможность расширений, что позволяет придавать любую лишнюю информацию к каждой полезной нагрузке отклика (https://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L95)

Если вы не используете express-graphql, вы можете смотреть на него как пример того, как вы можете включать свои собственные метаданные в каждый ответ. express-graphql - довольно простая оболочка, и вы всегда можете просто написать свои собственные данные в ответ. Например, это линия, где express-graphql прикрепляет errors (https://github.com/graphql/express-graphql/blob/c92cfad64f4b18abce3cdeca36bb8553dd020773/src/index.js#L309). Вы можете сделать то же самое, но под другим ключом.

Удачи!

+0

На самом деле, я использую express-graphql, поэтому ваш ответ определенно очень полезен. Спасибо, что даже указали на соответствующие строки источника. Мне нравится это. – LongHike

0

Один из способов иметь errors и messages как часть результата запроса состоит в том, чтобы включать их как поля в тип (-ы) объекта GraphQL.

Например, у вас есть тип объекта GraphQL Item с идентификаторами полей, именами, ошибками и сообщениями. Когда сервер базы данных отключен, заполняется только поле экземпляра объекта errors. Когда элемент с данным ID недоступен, заполняется поле messages. Когда элемент доступен, задается поле имени.

+0

Да, но затем, чтобы сделать их доступными для клиента, клиент должен будет явно запросить их как часть запроса. Пожалуйста, исправьте меня, если я ошибаюсь. – LongHike

+0

Да, клиент получает то, что хочет. –