我很好奇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错误。
这里有什么显而易见的东西吗?
答案 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]
向用户显示警告。