问题描述
我故意从后端触发了一个错误的请求。使用express的后端可以按预期正确回答:
db.d_snapshot4.aggregate([{$match: {"snapshot_date": {$gte: test_var.max_snapshot_date } }}]);
我的问题是:400总是显示在浏览器控制台中吗?我以为我以正确的方式处理了错误。
为什么我必须使用
检索前端中的数据?
[...]
.catch((error) => {
res.statusCode = 400;
res.json({
msg: "This is some error",err: error,});
});
代替(类似于200:)
// 400:
function (data) {
var data = data.responseJSON.msg);
}
我只是想知道我做错了什么。
谢谢您的建议
解决方法
异步获取数据时,2**
块将处理.catch
响应代码以外的任何响应。因此,任何其他响应,无论是4**
还是5**
都会被catch块捕获,因此,如果您使用的是像Axios之类的库,则来自后端的响应将位于{ {1}}或error.response
。
我不知道您正在使用什么来进行数据的异步获取,即获取Api,所以我的回答是一个通用响应,并且上面的代码是否完整?
根据我的经验,无论是异步调用还是生成错误的任何错误始终都会记录到控制台,但是您可以从前端处理catch块中的那些错误
,问题是当console.log
尝试输出错误时,将打印字符串表示形式,而不是对象结构,因此您看不到.response
属性,或者在您的情况下看不到{{1 }}
通过使用catch块.responseJSON
捕获错误,或者如果使用.catch()
,通常应该将代码包装在async / await
内以捕获错误,否则它将始终输出控制台中的红色错误