Как я могу поймать RelayObervable Необработанную ошибку, когда возвращаются ошибки graphql?
Мой бэкэнд возвращает следующий ответ:
const errorMessage = {
errors: [
{
message: 'User is logged out',
},
],
data: null,
};
return res.status(200).json(errorMessage);
Мое реактивное приложение, использующее реле, возвращает следующую ошибку:
RelayObservable: Unhandled Error Error:
Relay request for `HomeQuery` failed by the following reasons:
Эта ошибка появляется, когда я пытаюсь выполнить запрос к бэкэнду, и он возвращает приведенный выше массив ошибок errorMessage graphql. У меня нет способа отловить эту ошибку в моем слое ретрансляционной сети ДО того, как он сгенерирует красный экран. Моя среда ретрансляции выглядит так:
const network = new RelayNetworkLayer([
urlMiddleware({
url: () => Promise.resolve(`${config.endpoint}backend`),
headers: async () => authenticateHeaders(fetchHeaders),
}),
retryMiddleware({ fetchTimeout: 1000 }),
next => req => {
if (!req.uploadbles) {
req.Accept = 'application/json';
req['Content-Type'] = 'application/json';
}
return next(req);
},
next => async req => {
const res = await next(req);
if (isLoggedOut(res)) {
// Using react-navigation, route to the login screen
dispatch(routeToLogin())
// I also tried returning `dispatch(routeToLogin())` and `{ data: null, errors: res.payload.errors }` without luck
}
return res;
}
]);
Есть ли способ, которым я могу перемещаться, используя dispatch(routeToLogin())
не видя ошибки красного экрана, когда возвращаются ошибки graphql?
Редактировать 1
За react-relay-network-modern
: Вы можете добавить опцию noThrow следующим образом: new RelayNetworkLayer(middlewares, { noThrow: true });
Опция noThrow не существует для react-relay-network-layer
(реле классика), я могу что-нибудь сделать, чтобы обойти это?
1 ответ
Пожалуйста, попробуй noThrow
опция:
const network = new RelayNetworkLayer(middlewares, { noThrow: true });