Обработка ошибок в Express с использованием Ax ios для вызова API - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь настроить базовое c express приложение для получения некоторых данных API с помощью ax ios. Я хочу сделать все правильно, но я немного потерян с обработкой ошибок. В идеале, если есть ошибка, я хочу сообщить об этом пользователям, что я мог бы сделать, если бы вызов API был внутри этого маршрута. Но как это сделать, если это отдельная функция?

ax ios вызов функции asyn c:

const getForm = async () => {
    try {
        const config = {
            method: 'get',
            url: 'https://api.something.org/niceform'
            }
        }
        const response = await axios(config)
        return response
    } catch (error) {
        return error.message
    }
}

express route:

app.get('/niceform', async (req, res) => {
    try {
        const data = await getForm()
        res.send(data)
    } catch (error) {
        ???
    }
})

Если я правильно понимаю, getForm() функция возвратит либо ответ, либо ошибку, а затем маршрут отправит все, что вернется. Но тогда что делает блок catch маршрута и как его использовать?

Считается ли эта установка хорошей практикой? Любой совет будет оценен, я все еще учусь.

1 Ответ

0 голосов
/ 27 января 2020

Блок захвата можно удалить из функции getForm. В любом случае в маршруте get будет обнаружена ошибка.

const getForm = async () => {
    const config = {
        method: 'get',
        url: 'https://api.something.org/niceform'
    };

    const response = await axios(config);

    return response;
}

Или ошибка может быть перехвачена в getForm, чтобы сделать что-то в этом блоке перехвата, и выдать:

const getForm = async () => {
    const config = {
        method: 'get',
        url: 'https://api.something.org/niceform'
    };

    try {
        const response = await axios(config);
        return response;
    } catch (err) {
        // log the error
        // add extra information to the error
        // else
        // (see the attached answer)
        throw err;
    }
}

Следовательно, в блоке перехвата на маршруте get можно ответить об ошибке:

app.get('/niceform', async (req, res) => {
    try {
        const data = await getForm();
        res.send(data);
    } catch (error) {
        res.error(error);
    }
})

Ссылка:

...