Угловой http поток двойной запрос [GET, HEAD] - PullRequest
0 голосов
/ 04 октября 2018

Я работаю над изучением Angular [6], и хотя я не очень хорошо разбираюсь в Observables, я чувствую, что, по крайней мере, создал полезный пример.Тем не менее, я сталкиваюсь с постоянной проблемой, которая заставляет меня поверить, что я использую неправильный подход или что-то в корне неправильно понял.

В моем ApiService:

 getTransaction(uid:number):Observable<Transaction[]>{
   let url = this.endPoint + '/transaction';
   if(uid !== undefined){
     url += '/' + uid;
   }
   return this._httpRequest('GET',url,this._buildAuthHeader(),null).map((response)=>{
     if(response['body'] && uid === undefined){
       return <any>response['body'].map((transaction)=>{return new Transaction(transaction);});
     }else if(response['body']){
       return new Transaction(response.body);
     }
   });
 }

И затем это реализацияв моем BuddyService:

  constructor(private ApiService:ApiService,private cookie:CookieService) {
    this.checkCookie();
  }
  authenticate(username,password):void{
    this.ApiService.authenticate(username,password).subscribe((response)=>{
      if(!response['error']){
        this.ApiService.token = response.token;
        this.cookie.set('auth_token',this.ApiService.token);
        this.checkCookie();
      }else{
        console.log(response);
      }
    });
  }
  checkCookie():void{
    if(this.cookie.check('auth_token')){
      this.ApiService.token = this.cookie.get('auth_token');
      this.ApiService.verifyToken().subscribe((response)=>{
        if(!response['error']){
          this.init();
        }else{
          // console.log(response);
        }
      });
    }
  }
  init():void{
    this.ApiService.getTransaction(undefined).subscribe((data)=>{console.log(data);this.transactions = data;});
  } 

Когда это обслуживается и страница загружается, все работает как положено.За исключением того, что каждый вызов API на самом деле является 2 вызовами и запросом OPTIONS, за которым следует мой реальный запрос, в результате чего в приведенном выше примере транзакции this.transaction всегда остаются неопределенными до того, как он будет заполнен.Что я здесь не так делаю?Как я могу подписаться на результат реального запроса, а не на запрос ОПЦИИ?

Спасибо заранее!

РЕДАКТИРОВАТЬ:

 getTransaction(uid:number):Observable<Transaction[]>{
   let url = this.endPoint + '/transaction';
   if(uid !== undefined){
     url += '/' + uid;
   }
   let req = new HttpRequest(
     'GET',
     url,
     {
       headers:new HttpHeaders({'auth_token':this.token});
     }
   );
   return this.http.request(req).map((response)=>{
     console.log(response);
   });
 }

После похудения до болееБаскетбольная версия моей проблемы Я все еще вижу те же результаты.console.log(response); сначала отобразит {type:0} на предпечатной проверке и HttpResponse на истинном запросе.

Мне кажется, что эта проблема должна затронуть всех, кто отправляет запросы из разных источников?

1 Ответ

0 голосов
/ 04 октября 2018

Запрос OPTIONS является предварительным запросом для CORS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...