angular js中的默认错误处理程序
Default error handler in angular js
我很好奇你们是如何为angularJS应用程序中的所有$resource服务调用创建默认错误处理程序的?显然,如果promise .then(success, faulure)
总是相同,那么一直为其提供错误的函数回调是没有意义的。所以问题是:
- 您是否对所有资源服务调用都使用某种默认的错误处理程序?你是怎么做的?拦截器
- 如果您需要为一个特定的服务调用(例如,一百个调用中的一个)创建自定义错误处理程序,那么如何覆盖拦截器的默认错误处理程序呢
对于API错误情况,我更喜欢使用HTTP服务拦截器。这是一件很容易设置的事情。
它做什么?顾名思义,它拦截通过HTTP服务和资源服务的每个响应。
我的方法由两部分组成。
首先是ResponseHandler
工厂:
app.factory('ResponseHandler', responseHandler);
responseHandler.$inject = ['$q', '$log'];
function responseHandler ($q, $log) {
return {
response: responseHandler,
responseError: responseErrorHandler
};
function responseHandler (response) {
$log.info('HTTP response ', response);
// success cases go through here
return response;
}
function responseErrorHandler (rejection) {
$log.error('HTTP error ', rejection);
// error cases go through here
return $q.reject(rejection);
}
}
第二部分,ResponseHandler
在HTTP提供者中的实际"激活":
app.config(errorInterceptor);
errorInterceptor.$inject = ['$httpProvider']
function errorInterceptor ($httpProvider) {
$httpProvider.interceptors.push('ResponseHandler');
}
我希望这个小例子能清楚地说明如何将它集成到一个有角度的应用程序中。例如,在我的案例中,我通过用toast通知整个应用程序,直接在responseErrorHandler
中处理大多数错误情况。
我主要依靠错误状态(例如401或403)来进行特殊操作。我不知道你是否需要更多,但我建议你"玩"一下状态码和响应格式。
例如:如果表单中存在服务器端验证错误,您可能不想在这个基本级别上处理它。因此,我发送了一个特殊的验证错误,状态代码为200,它正在通过拦截器,但随后像往常一样在.then(..)
中被捕获。
相关文章:
- javascript:如何在antlr生成的Lexer中进行错误处理
- 生成pdf或其他非html文件时的错误处理
- sailsjs在创建两个模型时的错误处理
- 为什么没有调用我的流错误处理程序
- 错误处理try&catch+回调
- EventSource中的错误处理
- Angular JS中的通用Ajax错误处理-拦截器
- Sinon Mocha节点错误处理
- 如果文件不存在,fs.watch是否有错误处理程序
- Javascript初始化和错误处理
- AngularJS错误处理:根据错误数组显示错误
- JQuery 图像错误处理
- BreezeJS中央错误处理程序和自动重试
- 文件下载html与错误处理FileNotFound
- 使用mongoose保存多个文档时的错误处理
- Node.js如何知道回调的第一个参数是否是错误处理程序
- Meteor JavaScript-错误处理
- AJAX自定义错误处理代码问题
- 正在获取丢失的错误处理程序套接字消息,无法读取属性'timerID'使用Node.js和Socket.i
- 为什么不't JavaScript库使用错误处理