我用Angular 4HttpClient向外部服务发送请求.这是一个非常标准的设置:

this.httpClient.get(url).subscribe(response => {
  //do something with response
}, err => {
  console.log(err.message);
}, () => {
  console.log('completed');
}

问题是,当请求失败时,我会看到一个通用的

如何访问在chrome开发工具中看到的实际响应消息?

下面是一个演示问题的屏幕截图:

推荐答案

这个问题与CORS有关.我注意到Chrome控制台中还有一个错误:

请求的资源上不存在"Access Control Allow Origin"标头.因此,不允许访问源"http://localhost:4200".响应的HTTP状态代码为422`

这意味着来自后端服务器的响应缺少Access-Control-Allow-Origin报头,即使后端nginx配置为将这些报头添加到带有add_header directive的响应中.

但是,该指令仅在响应代码为20X或30X时添加标题.在错误响应中,缺少标题.我添加了参数"response of header"以确保使用always:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;

一旦后端配置正确,我就可以访问Angular 代码中的实际错误消息.

Typescript相关问答推荐

类的对象键没有在构造函数中初始化或分配.为什么引用它会掩盖错误?

如何获取数组所有可能的索引作为数字联合类型?

Typescript对每个属性具有约束的通用类型

如何使用axios在前端显示错误体

使用React处理Websocket数据

TypeScript类型不匹配:在返回类型中处理已经声明的Promise Wrapper

在Typescribe中,extends工作,但当指定派生给super时出错""

与字符串文字模板的结果类型匹配的打字脚本

路由链接不会导航到指定router-outlet 的延迟加载模块

来自类型脚本中可选对象的关联联合类型

如何避免推断空数组

函数重载中的不正确TS建议

使用KeyOf和Never的循环引用

打字错误推断

如何从接口中省略接口

为什么在这种情况下,打字脚本泛型无法正确自动完成?

在抽象类构造函数中获取子类型

为什么受歧视的unions 在一种情况下运作良好,但在另一种非常类似的情况下却不起作用?

Typescript:是否将联合类型传递给重载函数?

断言同级为true或抛出错误的Typescript函数