JavaScript模块中错误处理拦截器是用户定义的可复用错误处理函数,可通过命名导出、默认导出或工厂函数导出,需主动调用(如catch回调或try/catch),非自动生效。

在 JavaScript 模块中,错误处理拦截器通常指一个函数(如中间件、统一异常捕获逻辑、或请求拦截器),用于集中处理错误。它本身不是语言内置类型,而是由你定义的可复用逻辑。要导出它,只需用 export 将其声明为模块的公开接口即可。
导出命名的拦截器函数
最常见方式:定义一个具名函数,用 export 显式导出。
// errorInterceptor.js
export function errorInterceptor(error) {
console.error('全局错误捕获:', error);
if (error instanceof TypeError) {
return new Error('类型错误,请检查输入参数');
}
if (error.response?.status === 401) {
// 例如跳转登录页
window.location.href = '/login';
}
return error;
}
使用时按名字导入:
import { errorInterceptor } from './errorInterceptor.js';
导出默认拦截器(适合单一主逻辑)
如果该模块只提供一个核心拦截器,用 export default 更简洁。
立即学习“Java免费学习笔记(深入)”;
// apiErrorHandler.js
export default function apiErrorHandler(err) {
if (err.name === 'AbortError') {
console.warn('请求已取消');
return null;
}
throw err; // 或返回标准化错误对象
}
导入时无需大括号:
import apiErrorHandler from './apiErrorHandler.js';
导出拦截器工厂函数(支持配置)
若拦截器需初始化参数(如日志开关、重试次数),导出一个返回拦截器的工厂函数。
// createErrorInterceptor.js
export function createErrorInterceptor({ log = true, notify = true } = {}) {
return function intercept(error) {
if (log) console.group('【错误拦截】', error);
if (notify && error.message) alert(`系统提示:${error.message}`);
return error;
};
}
使用示例:
import { createErrorInterceptor } from './createErrorInterceptor.js';
const myInterceptor = createErrorInterceptor({ log: false });
fetch('/api/data').catch(myInterceptor);
配合 try/catch 或 Promise 链使用的建议
拦截器本身不自动生效,需主动调用。常见结合方式:
- 作为
catch()回调:fetch(...).catch(errorInterceptor) - 封装在异步函数中:
async function safeFetch(url) { try { ... } catch (e) { return errorInterceptor(e); } } - 在框架中注册(如 Express 的
app.use((err, req, res, next) => { ... }))
注意:浏览器原生不支持“自动拦截所有未捕获错误”,如需全局兜底,仍需搭配 window.addEventListener('error') 或 window.addEventListener('unhandledrejection')。


















