AngularJS和ExpressJS http错误处理

时间:2015-07-28 08:29:28

标签: angularjs express error-handling

我很好奇MEAN设置中http错误处理的正确方法是什么。假设我有一个快速路由设置,如下所示:

router.get('/', function(req, res) {

    fetchSomeData(function (err, data) {
        if (err) {
            // Okay some error occurred
            return res.send(500, err); 
        } else {
            // All fine
            res.json(data);
        }
    });
});

AngularJS http提取看起来像这样:

$http.get('/api/things/')
    .then(
         function (response) {
             // Data received
         },
         function (httpError) {
             // Some http error occurred
         });

如果我在无法获取某些数据时发送500错误,那么它将登录网页Failed to load resource: the server responded with a status of 500 (Internal Server Error)的控制台开发人员控制台,这可能不会“看起来”对最终用户有利。< / p>

我在想,如果我改为快速路线if (err)条款,只需做res.json({ error: "Handle this error"});

然后,如果响应包含错误,我将能够在AngularJS $http中查找,然后为用户显示此错误,并且用户不必看到令人讨厌的500错误。

这里有什么显而易见的东西吗?

1 个答案:

答案 0 :(得分:0)

您的方法或多或少都是正确的。要使用expressJs处理错误,请在路由处理程序的末尾添加一个异常处理程序,作为

app.use(function(err, req, res, next) {
  if(!err) return next()
  console.log(err.stack)
  res.status(500).send({status:"error", message: err.message})
})

并确保您不会在路由处理程序中捕获异常,否则err对象将为undefined

现在,在客户端,您可以检查if (data['status'] == "error"),然后使用data['message]向用户显示警告。