Правильно выбросить ошибку из топора ios Call - PullRequest
0 голосов
/ 30 января 2020

У меня есть два приложения (appA, appB). A вызывает B

Конечная точка AppA равна

    api.get('/', (req, res, next) => {
        return axios({
            method: "GET",
            url: "http://localhost:3060/api/"
        }).then((data) => {
            return data.data
        }).catch((err) => {
            const {config, request, response} = err
            let e = new Error(`Rethrowing the "${"B"}" error FROM A`)
            e.stack?.split('\n').slice(0,2).join('\n') + '\n' + response.data;
            throw e
        })
    });

AppB:

    api.get('/', (req, res) => {
        throw new Error('B')
    });

Моя цель - добавить ошибку из AppB в новую ошибку в AppA и отправить это для тех, кто когда-либо называет AppA. Когда я пытаюсь выбросить ошибку из топора ios, вызов выдает ошибку в консоли и говорит nhandledPromiseRejectionWarning: Error: Rethrowing the "B" error FROM A. А конечная точка просто перестает работать.

Как правильно выбросить добавленную ошибку из улова топора ios? Я хотел бы отправить трассировку стека с сообщением об ошибке.

Спасибо

Ответы [ 2 ]

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

Вы можете отправить сообщение об ошибке следующим образом:

 api.get('/', (req, res, next) => {
        return axios({
            method: "GET",
            url: "http://localhost:3060/api/"
        }).then((data) => {
            return data.data
        }).catch((err) => {
           let errorStack = new Error(err);
           res.status(500).send(errorStack.toString()) // This will send the error stack
        })
    });
0 голосов
/ 30 января 2020

Вам просто нужно отправить ответ об ошибке из вашего AppB

api.get('/', (req, res) => {
       res.status(500).send('send your error')
});

Теперь, когда вы делаете вызов из вашего AppA и если вы получаете сообщение об ошибке от AppB

      that error directly throw to catch block of your AppA 

    // AppA
    .catch((err) => {
       //you will receive your AppB error here if you set status code as 500 or any other error status code 
    })

Есть две возможности в вашем случае:

Ошибка от AppA / AppB

Если вы получаете ошибку от AppA, вы можете выбросить свою ошибку и отправить ответ своему пользователю из блока catch

В противном случае, если вы получаете ошибку от AppB, то вы можете отправить ответ с кодом состояния 500, означающим ошибку с сервера, на ваш AppA Таким образом, ваше приложение будет напрямую получать эту ошибку в блоке перехвата как ошибка из-за кода состояния 500 и вашего AppA собирается отправить ошибку вашему пользователю напрямую.

...