我是相当新的表达,并想知道是否存在一个全局错误捕捉器。我正在处理一个已经存在的代码与所有的控制器创建,这将是菜鸟实现尝试和捕捉在所有的控制器。我需要一个全局错误捕捉器来检测代码中的中断并响应客户端。是否存在用于该功能的现有库或现有代码实现。
hjqgdpho1#
如果你的控制器不是异步的,你可以简单地在注册所有路由后添加错误处理程序
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { throw new Error('Something went wrong'); }); // Add more routes here // Error handler app.use(function (err, req, res, next) { // All errors from non-async route above will be handled here res.status(500).send(err.message) }); app.listen(port);
字符串如果你的控制器是异步的,你需要添加一个自定义的中间件到你的控制器来处理异步错误。中间件示例取自this answer
const express = require('express'); const app = express(); const port = 3000; // Error handler middleware for async controller const asyncHandler = fn => (req, res, next) => { return Promise .resolve(fn(req, res, next)) .catch(next); }; app.get('/', asyncHandler(async (req, res) => { throw new Error("Something went wrong!"); })); // Add more routes here // Error handler app.use(function (err, req, res, next) { // All errors from async & non-async route above will be handled here res.status(500).send(err.message) }) app.listen(port);
型
r9f1avp52#
如果你是2017年以后出生的,这里有一个异步等待版本
import express from 'express'; const app = express(); const port = 3000; // Error handler middleware for async controller function asyncErrorHandler(fn) { return async (req, res, next) => { try { await fn(req, res, next) } catch (e) { return next(e) } } }; app.get('/', asyncErrorHandler(async (req, res) => { throw new Error("Something went wrong!"); })); // Error handler app.use(function (err, req, res, next) { // All errors from async & non-async route above will be handled here if (err) { // console.log(err) return ( err.message ? res.status(err.statusCode || 500).send(err.message) : res.sendStatus(500) ) } next() }) app.listen(port);
字符串
2条答案
按热度按时间hjqgdpho1#
如果你的控制器不是异步的,你可以简单地在注册所有路由后添加错误处理程序
字符串
如果你的控制器是异步的,你需要添加一个自定义的中间件到你的控制器来处理异步错误。中间件示例取自this answer
型
r9f1avp52#
如果你是2017年以后出生的,这里有一个异步等待版本
字符串