Что нужно проверить перед доступом к данным, возвращенным в результате запроса или мутации
- Если загрузка -> вернуть какой-либо компонент загрузчика
- Если присутствует ошибка -> отобразить какой-либо компонент ошибки
Если не выполнено ни одно из двух вышеуказанных условий, то наверняка у вас есть данные.
Помимо этого вам нужно иметь
1. На клиенте Apollo "errorPolicy"
const client = new ApolloClient({
defaultOptions: {
watchQuery: {
errorPolicy: 'all'
},
query: {
errorPolicy: 'all'
},
mutate: {
errorPolicy: 'all'
}
},
link,
cache,
connectToDevTools: true,
})
2. Для ошибки настройки, отправленной с сервера -
Вы можете использовать formatError
const server = new ApolloServer({
...root,
resolverValidationOptions: {
requireResolversForResolveType: false,
},
formatError, <---------- send custom error
formatResponse: (response, query) => formatResponse({ response, query }),
dataSources,
context: async ({ req, res }) => {
const user = req.user;
return { user, req, res };
}
});
1028 * например *
const formatError = (error) => {
const { extensions } = error;
logger.error(error);
const exception = extensions.exception ? extensions.exception : {};
logger.error('\nStackTrace');
logger.error(exception.stacktrace);
exception.stacktrace = null;
const extractedError = extractErrorFromExtention(extensions);
return extractedError || { message: error.message, code: extensions.code, exception };
};