2017-12-07 117 views
10

Buduję aplikację dla systemu Android, używając funkcji reagowania natywnej wersji expo zintegrowanej z redukcją. Interfejs API jest wywoływany za pomocą metody pobierania, ale zawsze wyświetlany jest wynik z pamięci podręcznej. Serwer nie odebrał żądania po raz drugi. Próbowałem wyłączyć pamięć podręczną za pomocą następującego kodu.React Natywny interfejs API pobierania nie może wyłączyć buforowania.

export const mymails = (token) => { 
    return fetch(
     API_URL+'?random_number='+ new Date().getTime(), { 
     method: 'GET', 
     headers: getHeaders(token) 
    }) 
    .then(response => response.json()); 
}; 

getHeaders = (token) => { 
    return { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     'Authorization': 'Token token='+token, 
     'Cache-Control': 'no-cache, no-store, must-revalidate', 
     'Pragma': 'no-cache', 
     'Expires': 0 
    }; 
} 

Kiedy wywołuję API za pomocą klienta Postmana, widzę inny wynik (nie jest buforowany). Próbowałem dodać liczbę losową jako parametr i ustawiając nagłówki kontrolek pamięci podręcznej, ale nadal zwracając wynik w pamięci podręcznej. Czy jest coś, co mógłbym spróbować.

Dzięki

+1

Interesujące. AFAIK, api aportu nie powoduje automatycznego buforowania czegokolwiek. Może buforowanie dzieje się na końcu API? Czy chciałbyś udostępnić punkt końcowy API, aby móc z nim grać? –

+0

Myślę, że "Cache-Control": "no-cache" musi być pracą. Czy możesz udostępnić punkt końcowy interfejsu API, abyśmy mogli sprawdzić numer: –

+0

Niestety, to był błąd na serwerze. Nazwałem inną funkcję, a nie tą, którą edytowałem. Ah. głupi ja. –

Odpowiedz

3

Musi być problem z tym, jak ty konfigurowania nagłówki do pobierania prośbę.

spróbować z następujących,

Możesz śledzić link samo w Official Fetch API

const mymails = (token) => { 
 

 
    var myHeaders = new Headers(); 
 
    myHeaders.set('Accept', 'application/json'); 
 
    myHeaders.set('Content-Type', 'application/json'); 
 
    myHeaders.set('Authorization', 'Token token=' + String(token)); 
 
    myHeaders.set('Cache-Control', 'no-cache'); 
 
    myHeaders.set('Pragma', 'no-cache'); 
 
    myHeaders.set('Expires', '0'); 
 

 
    return fetch(
 
     API_URL + '?random_number=' + new Date().getTime(), { 
 
      method: 'GET', 
 
      headers: myHeaders 
 
     }) 
 
     .then(response => response.json()); 
 
};

+0

Guy powiedział, że popełnił błąd na swoim serwerze, nie chodziło o poziom pobierania lub JS. –

+0

tak, w takim razie powinien usunąć pytanie, czyż nie? –