簡體   English   中英

如何最好地處理ExpressJS POST路由中的錯誤

[英]How to best handle errors in ExpressJS POST routes

我目前正在努力處理ExpressJS路由(尤其是POST路由)中的錯誤處理的最佳實踐。

我已經設置了默認的中間件錯誤處理,並且正在使用return next(err); 如有任何錯誤。 這對於GET路由中的所有錯誤均適用。

但是,處理其他路由類型(尤其是POST路由)中的錯誤的最佳實踐是什么?

在前端,我正在使用AngularJS,並且正在使用$http發布。 使用return next(err); 在POST路由中, $http.error(function(data,status,headers,config) (stats .error(function(data,status,headers,config)稱為(AngularJS),我在data變量中收到了整個html錯誤頁面。

我要尋找的是用戶通過ExpressJS中間件重定向到常規錯誤頁面的情況,以防客戶端不應處理此錯誤。 這樣,我也可以在一個地方進行錯誤處理和記錄日志。

因此,我目前的想法是:在POST路由中,只需return res.status(500).send({err: err}); 萬一應用程序無法恢復,請在客戶端使用帶有AngularJS的重定向到常規錯誤頁面。 但是,我更喜歡使用ExpressJS中間件來集中處理錯誤。

感謝您對最佳實踐文章的幫助或指點!

作為參考,(標准)錯誤中間件功能如下所示:

app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('shared/error/error', {
    message: err.message,
    error: err
  });
});

如果您使用有角度的$ http方法獲取或發布到服務器,則應將JSON數據返回給應用以進行解析。 例如,您的路線:

app.get('/example', function(req, res) {
    getSomeData()
        .then(function(data) {
            res.status(200).json(data);
        }, function(err) {
            res.status(400).json(err);
        });
});

在您的角度服務中,您可以創建一個以諾言方式返回路線數據的方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM