2016-06-30 5 views
3
setzen muss

Ich versuche, einige Daten von einer externen API (von Mashape) zu bekommen, die einen bestimmten Header benötigt, um den API-Schlüssel zu setzen.Ich kann nicht eine Anfrage, die eine Überschrift mit Axios

Alles ist in Ordnung, mit jQuery:

$.ajax({ 
 
    url: 'https://omgvamp-hearthstone-v1.p.mashape.com/cardbacks', 
 
    type: 'GET', 
 
    data: {}, 
 
    dataType: 'json', 
 
    success: function(data) { console.dir((data.source)); }, 
 
    error: function(err) { alert(err); }, 
 
    beforeSend: function(xhr) { 
 
    xhr.setRequestHeader("X-Mashape-Authorization", "MY_API_KEY"); 
 
    } 
 
});

aber wenn ich versuche, die gleiche Anfrage mit axios für eine reagieren Anwendung zu tun, ich habe einen Fehler 404:

axios.get({ 
 
    url: 'https://omgvamp-hearthstone-v1.p.mashape.com/cardbacks', 
 
    headers: { 
 
     "X-Mashape-Authorization": "MY_API_KEY" 
 
    } 
 
})

Gibt es etwas, das mir fehlt? Vielen Dank.

+0

Hallo. Können Sie den genauen 404-Fehlertext angeben? kommt es bei GET oder bei OPTIONS Anfrage? (Sie können es in Netzwerk-Panel in Chrome Devtools überprüfen) –

Antwort

9

auch versuchen, es so ohne Einstellung Standardwerte zu tun:

axios.get('https://omgvamp-hearthstone-v1.p.mashape.com/cardbacks', { 
     headers: { "X-Mashape-Key": "MY_API_KEY" } 
    }) 
     .then((resp) => { 
     console.dir(resp); 

     }) 
     .catch(err => { 
     console.log(err); 
     }); 
    } 

Es sollte funktionieren.

PS Ich habe auch beobachtet, dass Sie verschiedene Header-Schlüssel in Frage (X-Mashape-Authorization) und beantworten (X-Mashape-Key). Vielleicht hängt das auch irgendwie mit 404 Fehler zusammen?

+0

Ich fand es schließlich einfacher mit der Config, da alle meine Anrufe in Richtung der gleichen API gemacht werden, aber Sie meine erste Frage beantwortet, so haben Sie meine upvote :) –

+0

Ja, Sie haben Recht, ist es besser, Standardwerte zu setzen zu ähnlichen Anrufen. Und danke für Ihre Unterstützung. Viel Glück! –

+0

gilt dies auch für Post-Methode? Ich kann es nicht funktionieren. es scheint Header als Nutzlast-Eigenschaft zu senden stattdessen – razorxan

12

Ich habe endlich verstanden.

Wir müssen den Header, bevor die Anforderung axios.defaults.headers.common['header_name'] = "API_KEY"; mit einzustellen:

axios.defaults.baseURL = 'https://omgvamp-hearthstone-v1.p.mashape.com'; 
axios.defaults.headers.common['X-Mashape-Key'] = "API_KEY"; 
axios.get('/cardbacks') 
    .then((resp) => { 
     console.dir(resp); 
    }); 
+0

ok, froh, dass Sie eine Lösung –

+1

Das nächste Mal lese ich weiter in der Dokumentation :) –

+0

Es ist eine gute Idee zu Speichern Sie die Kopie der vorherigen Standardeinstellungen, und setzen Sie die Standardeinstellungen erneut zurück, da sich das obige Verhalten auf ** alle ** nachfolgenden Anforderungen auswirkt. – technophyle

4

Ich habe einen besseren Weg, um das zu lösen.

Sie müssen nur Parameter hinzufügen Format von axios wie dies unter:

axios({ 
 
    method: <method>, 
 
    url: <url>, 
 
    data: <params>, 
 
    headers: { common: <headers> }, 
 
    }) 
 
    .then(response => { 
 
    if (!cb) return { error: 'No callback' }; 
 
    return cb(response); 
 
    }) 
 
    .catch((err) => cb(err.response));

+0

nach dem Versuch, eine Vielzahl von verschiedenen Methoden, um dieses Problem zu lösen, Ihr ist derjenige, der für mich arbeitete. Vielen Dank. –

Verwandte Themen