澄清“ 400-错误请求”

问题描述

我故意从后端触发了一个错误的请求。使用express的后端可以按预期正确回答:

db.d_snapshot4.aggregate([{$match: {"snapshot_date": {$gte: test_var.max_snapshot_date } }}]);

我的问题是:400总是显示在浏览器控制台中吗?我以为我以正确的方式处理了错误

enter image description here

为什么我必须使用

检索前端中的数据?

[...]

.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内以捕获错误,否则它将始终输出控制台中的红色错误