React-Apollo error показывает только код состояния 500 - PullRequest
0 голосов
/ 22 марта 2019

Мне интересно, как я могу получить доступ к своим ошибкам броска в моем интерфейсе с помощью response-apollo?

Мой простой распознаватель для выборки одного клиента выглядит следующим образом, где args._id - идентификатор клиента. Теперь, если идентификатор не действителен, реагируйте - Аполлон просто выдает ошибку 500.

Ошибка! Ошибка сети: ответ не выполнен: полученный код состояния 500

   customer: async (args, req) => {
        const validateId = (id) => {
            return mongoose.Types.ObjectId.isValid(id)
        }
        if(args._id && validateId(args._id)){
            try { 

                const customer = await Customer
                    .findById(args._id)

                return transformCustomer(customer)
            }
            catch (err) {
                throw err
            }
        }
        else {
            throw new Error("error")
        }
    },

Я попытался использовать errorPolicy = "all" и получить доступ к error.graphQLErrors, но это не сработало, поскольку выдает ошибку 500.

Невозможно прочитать свойство 'graphQLErrors' из неопределенного

Ответы [ 2 ]

1 голос
/ 22 марта 2019

РЕДАКТИРОВАТЬ (в дополнение к переносу в try / catch) - Возможно, вам следует проверить правильность _id перед отправкой запроса на сервер:

customer: async (args, req) => {
    // do some validation on _id
    if (args._id && isValid(args._id) ) {
        try {
            const customer = await Customer.findById(args._id)
        } catch (e) {
          // handle server error
        }
    } else {
       // handle invalid _id here
    }
0 голосов
/ 22 марта 2019

Чтобы поймать ошибку, выданную apollo, вам нужно заключить вызов, который выполняет запрос, в try - catch.

В вашем примере это, вероятно,:

try {
    const customer = await Customer.findById(args._id);
} catch(err) {
    // handle the error
}

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

...