2015-12-07 23 views
10

Mam następujący kod, który działa działa dobrze:Aurelia Aurelia-fetch-klient i JSON POST

import {inject} from 'aurelia-framework'; 
import {HttpClient, json} from 'aurelia-fetch-client'; 


@inject(HttpClient) 
export class Items { 
    heading = 'Items'; 
    apiKey = ""; 

    constructor(http) { 
    http.configure(config => { 
     config 
     .useStandardConfiguration() 
     .withBaseUrl('https://testme.com/api/') 
      .withDefaults({ 
      headers: { 
       'content-type': 'application/json', 
       'Accept': 'application/json', 
       'X-Requested-With': 'Fetch' 
      } 
      }) 
    }); 

    this.http = http; 
    } 

attach() { 

let auth = { 
    Username:"admin", 
    Password:"1234" 
}; 

return this.http.fetch('auth', { 
     method: 'post', 
     body: JSON.stringify(auth), 
     headers: { 
     'Content-Type': 'application/json', 
     'Accept': 'application/json' 
     } 
    }) 
    .then(response => response.json()) 
    .then(response => { 
     this.apiKey = response.APIKey; 
     console.log(response); 
}); 

Jednakże, jeśli zastąpi linię body: JSON.stringify(auth) z json(auth) co wierzę poprawny sposób JSON serialise obiekt używający helpera Aurelia JSON, mój API zgłasza złe żądanie.

Czy jest coś innego niż helper w porównaniu z JSON.stringify?

+0

Czy Twój API w tej samej domenie co swojej stronie? Jeśli tak, spróbuj pozbyć się absolutnej ścieżki (https: //) w swojej funkcji konfiguracyjnej. Widzę, że z jakiegoś powodu treść żądania jest pusta z bezwzględnymi adresami URL, podczas gdy twój przykład działa dobrze, gdy wykonuję żądanie lokalne ... – Mikhail

+0

Żaden interfejs API nie jest pod innym adresem URL, co faktycznie daje mi problem z CORS, które na razie wyłączyłem w Safari. – user1513388

+1

Uruchom proxy sieci Web (na przykład skrzypek) i zobacz, co dokładnie się tam dzieje. Następnie dodaj wynik do swojego pytania. Czy widzisz kiedykolwiek swoją prośbę POST, a może tylko jedną z metodą OPTIONS? – Mikhail

Odpowiedz

4

Funkcja json wywołuje JSON.stringify, ale dodaje także Content-Type: application/json do nagłówków. Zastanawiam się, czy zgłoszony błąd może wynikać z tego, że nagłówek już istnieje, ponieważ wyraźnie go dodajesz.

Spróbuj ponownie użyć json, ale tym razem usuń kod, który modyfikuje nagłówki, aby dodać ten typ zawartości.

Zobacz tutaj kod dla tej funkcji json: https://github.com/aurelia/fetch-client/blob/master/src/util.js