我写了一条简单的路线,将两个数字相加。
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中了解了错误,但是如何通过我不理解的函数传递错误。
答案 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
});
}