如何最好地处理ExpressJS POST路由中的错误

时间:2016-11-19 13:00:08

标签: angularjs express

我目前正在努力应对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});

1 个答案:

答案 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);
        });
});