javascript - 在 express 中处理 javascript 错误

标签 javascript node.js express error-handling

假设我有以下异步功能

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/

相关文章:

当容器未响应端口 8080 上的 ping 时,Azure 应用服务上带有 pm2 的 Node.js 应用程序失败

node.js - 术语 'CI=false' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称

javascript - 关于范围、node.js 和express 的问题

express - Stripe CLI 触发随机事件而不是 payment_intent.succeeded

node.js - 如何将上传的文件保存在node js docker容器外部(即linux主机内部)?

javascript - sweet.js 替换它。和 @

javascript - 适用于 ie7、ie8 和 ie9 的最佳占位符 polyfil 脚本

javascript - 如何将变量转换为特定类型以使 typescript 无处不在?

javascript - 移相器 3 : Change "Hitbox"/Interactive area of sprite without physics

javascript - module.exports 与对象