Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HTTP侦听器使用Angular 2,4,6,7,8,9 TypeScript在失败的请求上获取状态0_Angular_Http_Typescript_Web Deployment_Angular Http Interceptors - Fatal编程技术网

HTTP侦听器使用Angular 2,4,6,7,8,9 TypeScript在失败的请求上获取状态0

HTTP侦听器使用Angular 2,4,6,7,8,9 TypeScript在失败的请求上获取状态0,angular,http,typescript,web-deployment,angular-http-interceptors,Angular,Http,Typescript,Web Deployment,Angular Http Interceptors,我使用Angular^4.3.6实现了以下HTTP拦截器 import {Injectable} from "@angular/core"; import { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent, HttpResponse, HttpErrorResponse } from "@angular/common/http"; import {Observable} from "rxjs/Observable

我使用
Angular^4.3.6
实现了以下HTTP拦截器

import {Injectable} from "@angular/core";
import {
  HttpInterceptor,
  HttpHandler,
  HttpRequest,
  HttpEvent,
  HttpResponse,
  HttpErrorResponse
} from "@angular/common/http";
import {Observable} from "rxjs/Observable";
import "rxjs/add/operator/do";

@Injectable()
export class InterceptorService implements HttpInterceptor {

  intercept(
    req: HttpRequest<any>,
    next: HttpHandler
): Observable<HttpEvent<any>> {
    return next.handle(req).do(evt => {
      console.log(evt);//this logs the success message properly
      if (evt instanceof HttpResponse) {
        //Keep going
      }
    },err => {
    console.log(err);
    //this logs the error but don't have useful info in it.
    });

}
}
]

但是失败时,我在第二个console.log上的
err
块中没有正确的状态代码,但在DEV console中从ZONE.js中有以下消息

zone.js:2263选项404(未找到)

我不确定我在这里遗漏了什么,但我希望这个状态能给我一些有效的东西,比如404403或heck 500,当它显然是正在发生的时候

我只是想要这些值,这样我就可以向UI显示正确的消息,并帮助客户端在出现故障时不会惊慌失措


欢迎任何帮助。提前感谢。

如果您使用的是CORS,您应该在服务器配置中选中“访问控制允许源站”

我在我的nginx服务器上解决了这个问题,添加了:

add_header "Access-Control-Allow-Origin" * always;
我错过了“始终”参数,这导致了与您相同的问题

在我的示例中,您应该注意标题“*”的值


该值必须包含允许的来源列表。

我找到了导致问题的原因。。这是服务器端的问题。您需要先设置CORS中间件,然后设置其余的API中间件

请注意,我使用的是Laravel 5.6+Angular 5

错误代码 电流代码
是什么导致了这种错误?您确定您确实从服务器收到了404、403或500错误吗?如果您甚至无法将请求发送到服务器(网络问题、DNS问题等),则可能无法获取HTTP状态代码。@JBNizet正在处理某些问题。我和你有过同样的经历,这是因为无法到达服务器。如果是其他错误,则可能是服务器端错误,而不是客户端错误。我看到浏览器控制台中有404错误消息是从zone.js记录的。显然这不是服务器问题。我们不能抓住那些状态码吗?如果拦截器在服务调用后没有捕获状态代码,那么拦截器的作用是什么?控制台中有错误吗?您确定响应有效吗。例如,尽管内容类型设置为JSON,但它是否包含无效的JSON?你能在plunkr中复制它吗?我关闭了服务器,zone.js控制台为404。我想让拦截器捕捉那个状态码。显然,它只返回0。我不认为我能在plunkr中重现这一点(我不同意这是最好的配置选项。这会使您的网站容易受到攻击。您应该始终将一组域列为白名单,而不是允许所有域。其他解决方案是什么?
name:"HttpErrorResponse"
ok:false
status:0
statusText:"Unknown Error" 
add_header "Access-Control-Allow-Origin" * always;
'api' => [
            'throttle:60,1',
            'bindings',
            \Barryvdh\Cors\HandleCors::class,
        ],
'api' => [
            \Barryvdh\Cors\HandleCors::class,
            'throttle:60,1',
            'bindings'
        ],