如何将错误从函数传递到catch块

时间:2019-07-26 11:01:40

标签: node.js express

我写了一条简单的路线,将两个数字相加。

   services.AddAuthorization(x =>
            {
                x.AddPolicy("PolicyAdmin", p => p.RequireRole("Admins"));
                x.AddPolicy("PolicyCustomers", p => p.RequireRole("Customers"));
            });

如何从catch块中的函数中获取错误?

因为现在我得到一个空对象。

import express from 'express';
import { isNumber } from 'util';

const router = express.Router();

// handles url http://localhost:8082/api/sum
router.get('/sum', async (req, res) => {
    try {
        const a = req.query.a; // 1
        const b = req.query.b; // g
        const result = await checkForNumber(a, b);
        return res.status(200).json({
            message: 'Sum',
            sum: result,
        });
    } catch (err) {
        return res.status(422).json({
            Error,
        });
    };
});

function checkForNumber(a, b) {
    if (isNumber(a) || isNumber(b)) {
        return a + b;
    }
    return new Error('NAN');
};

如果变量不是数字,我需要进入catch块并向用户发送错误。

{
    "message": "Sum",
    "sum": {}
}

我在库文档express.js中了解了错误,但是如何通过我不理解的函数传递错误。

3 个答案:

答案 0 :(得分:1)

您需要致电throw new Error('NAN');而不是return new Error('NAN');

此外,错误处理程序应如下所示:

return res.status(422).json({
  Error: err.message
});

答案 1 :(得分:1)

您正在获得

{
    "message": "Sum",
    "sum": {}
}

由于try / catch块正确执行,因此try会执行,因此不会陷入困境。因此,

return res.status(422).json({
            Error,
        });

永远不会执行,因为该块中没有错误。 问题出在const result = await checkForNumber(a, b);,我将执行以下操作:

try {
        const a = req.query.a; // 1
        const b = req.query.b; // g
        const result = await checkForNumber(a, b);
        let resultType = typeof result;
        if(resultType == "object") { //Check here if the const result is the error object or an integer and act consequently
          return res.status(422).json({
            Error,
          });
        } else {
          return res.status(200).json({
            message: 'Sum',
            sum: result,
        });
        }

    } catch (err) {
        return res.status(422).json({
            Error,
        });
    };

如果在创建new Error('NAN');时输出为{}而不是"NAN",那么在Error类上也可能出了问题。

答案 2 :(得分:1)

只需设置这样的条件

if (isNaN(a) || isNaN(b)) {
  throw new Error("NAN");
}

之前

const result = await checkForNumber(a, b);

做这样的事情:

catch (err) {
        return res.status(422).json({
            'error' : err.message || err
        });
    }