Node.js - ошибка попытки отлова не возвращается - PullRequest
0 голосов
/ 24 августа 2018

Я написал API-интерфейс node.js, используя платформу Express. Я использую await и async. Я ловлю асинхронную функцию в блоке try catch. Однако в методе catch (err) ошибка не возвращается.

try {

            const job = await this.jobRepository.functionDoesNotExist();

            if (job.success === false) {
                return res.status(404).json({
                    success: false,
                    status: 404,
                    data: job,
                    message: "Failed to retrieve job"
                });
            }

            return res.status(200).json({
                success: true,
                status: 200,
                data: job.data,
                message: "Successfully retrieved job"
            });

        } catch (err) {

            return res.status(500).json({
                success: false,
                status: 500,
                data: err,
                message: "The server threw an unxpected errror"
            });

        }

В приведенном выше примере я намеренно вызываю функцию, которая не существует, чтобы она выдавала ошибку.

Ответ, который я получаю, ниже. Он попадает в блок catch, но ошибка не добавляется в объект данных.

{
    "success": false,
    "status": 500,
    "data": {},
    "message": "The server threw an unxpected errror"
}

Однако, если я переместу нижнюю строку из блока try catch. Консоль выдаст следующую ошибку.

    const job = await this.jobRepository.functionDoesNotExist();

"error":{},"level":"error","message":"uncaughtException: this.jobRepository.functionDoesNotExist is not a function\nTypeError: this.jobRepository.functionDoesNotExist is not a function\n    at JobController.<anonymous>

Итак, мой вопрос: почему эта ошибка не отображается в ответе, когда вызов выполняется в блоке try catch.

1 Ответ

0 голосов
/ 24 августа 2018

По умолчанию объект ошибки не * JSON.stringify() -able. Читать здесь

Однако, чтобы получить трассировку стека, вы можете использовать err.stack примерно так:

    return res.status(500).json({
        success: false,
        status: 500,
        data: err.stack,
        message: "The server threw an unxpected errror"
    });
...