我目前正在努力应对ExpressJS路由中的错误处理最佳实践,尤其是POST路由。
我已经设置了默认的中间件错误处理,如果出现任何错误,我正在使用return next(err);
。这适用于GET路由中的所有错误。
但是,处理其他路由类型错误的最佳做法是什么,特别是POST路由?
在前端,我使用AngularJS,我使用$http
发布。在POST路由中使用return next(err);
时,.error(function(data,status,headers,config)
的{{1}}被调用(AngularJS),我在数据变量中收到整个html错误页面。
我正在寻找的是通过ExpressJS中间件将用户重定向到一般错误页面,以防客户端不应该处理此错误。这样,我也可以在一个地方进行错误处理和记录。
所以,我目前的想法:在POST路由中,只需执行$http
如果应用程序无法恢复,则在客户端使用AngularJS重定向到一般错误页面。但是,我更愿意使用ExpressJS中间件来处理错误。
我感谢任何帮助或最佳实践文章的指示!
作为参考,(标准)错误中间件函数如下所示:
return res.status(500).send({err: err});
答案 0 :(得分:1)
如果您使用角度$ http方法对服务器进行GET或POST,则应将JSON数据返回给应用程序进行解析。例如,您的路线:
app.get('/example', function(req, res) {
getSomeData()
.then(function(data) {
res.status(200).json(data);
}, function(err) {
res.status(400).json(err);
});
});
在角度服务中,您可以创建一个方法,在promise中返回路径的数据:
angularApp.service('DataService', function($http) {
this.getData = function() {
return $http.get('/example')
};
});
然后在控制器中使用这样的服务:
angularApp.controller('MyController', function($scope, DataService) {
DataService.getData()
.then(function(response) {
$scope.data = response.data;
}, function(err) {
showErrorMessage(err.statusText);
});
});