假设我有以下异步功能
export async function someAsyncFunction() {
const result = await fetchData();
return result[0].id;
}
在我有的路线上router.post(
'/some-path',
handleErrorAsync(async (req: Request, resp: Response, _err: Errback) => {
const data = await someAsyncFunction();
resp.json(data)
})
);
而且我有错误处理功能interface ResponseError extends Error {
statusCode: number;
}
// Middleware to respond with an error when error caught
export function handleError(
err: ResponseError,
_req: Request,
resp: Response,
_next: NextFunction
) {
if (err) {
resp.status(err.statusCode || 500).json(err);
}
}
export const handleErrorAsync = (func: Function) => (
req: Request,
res: Response,
next: NextFunction
) => {
func(req, res, next).catch((error: Error) => {
next(error);
});
};
因此,例如 fetchData
有一个错误响应对象,但是当错误是常规 javascript 错误时,它无法打印错误对象,而是仅打印 {}
有 500 错误。例如在这一行
return result[0].id;
如果结果为空( []
),那么这将抛出 TypeError
,这将被 handleError
捕获中间件,然后是 .json(err)
部分将仅显示 {}
有没有办法我可以使用相同的中间件同时获取服务器错误(正常工作)和内部服务器错误?
最佳答案
res.json 执行 JSON.parse,它返回一个空对象 {}。
我可以建议解构错误主体。
resp.status(err.statusCode || 500).json({message:err.message, error:err});
这将为您提供每个 native 错误的消息
关于javascript - 在 express 中处理 javascript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65235206/