Axios: Anforderungsparameter werden nicht mit Instanzparametern zusammengeführt

Erstellt am 31. Mai 2019  ·  83Kommentare  ·  Quelle: axios/axios

Beschreibe den Fehler

Bestimmte Anforderungsparameter werden nicht mit den Standardparametern der Instanz zusammengeführt.

Fortpflanzen

const instance = axios.create({
    baseURL: "http://www.example.com",
    params: {
      q: "question",
    }
  });
instance.get("/page", 
  { 
    params: { 
      page: 2 
    }
  }
)

Was passiert, ist, dass das Request-Param-Objekt das Standard-Param-Objekt der Instanz überschreibt. Die Instanz hat keinen Abfrageparameter von q .

Erwartetes Verhalten

Laut Dokumentation werden alle Konfigurationsoptionen zusammengeführt . https://github.com/axios/axios#instance-methods

Ich habe erwartet, dass die Anfrage sowohl die Parameter q als auch page enthält. So funktionierte es auch in der Version 0.18.0, was mir aufgefallen ist.

Umfeld:

  • Axios-Version: 0.19.0
  • Betriebssystem: 10.14.5 (18F132)
  • Browser: Node Express und Chrome
  • Browser: Node 10.15.0, Chrome-Version 74.0.3729.169 (offizielle Build) (64-Bit)
review

Hilfreichster Kommentar

Warten auf eine offizielle Lösung 😭

Alle 83 Kommentare

Hier ist ein laufendes Beispiel -- https://runkit.com/philipbjorge/axios-regression

Habe ein ähnliches Problem mit unseren sitzungsbasierten Authentifizierungstoken, die auch nicht zusammengeführt werden.

Ich _glaube_, die Lösung ist so einfach wie das Verschieben von params in die Eigenschaft in den Abschnitt deepMergeProperties . Diff hier: https://github.com/axios/axios/compare/8d0b92b2678d96770304dd767cd05a59d37f12cf...zackseuberling :zs-fix-merge-params

@zackseuberling könntest du dafür eine Pull-Anfrage stellen?

Ich habe ein gleiches Problem.

@jasonsaayman- Tests bestehen jetzt (für das, was ich für das richtige Verhalten

hoffe baldige Veröffentlichung, das Thema hat mich ziemlich genervt

Habe das gleiche Problem. Wann wird es behoben?

Das gleiche hier @wphestiraid 😬

Ein Downgrade auf 0.18.1 es für mich als Workaround behoben! Damit ist die Sicherheitslücke behoben.

@serranoarevalo Ich denke, wir können 0.18.1 :smile:

Dies scheint auch bei method zu passieren, wenn es nur im create Aufruf und nicht im request . Ich habe den ganzen Tag gebraucht, um das herauszufinden, definitiv eine bahnbrechende Veränderung. (Sollte dies ein separates Problem sein oder ist es Teil desselben allgemeinen Problems?)

Gleiches Problem hier

gibt es Neuigkeiten zu diesem? wann wird es behoben?

gibt es Neuigkeiten zu diesem? wann wird es behoben?

Verwenden Sie vorerst einfach v0.18.1 . ️

das verwende ich, aber ich muss auf v0.19.0 upgraden, sobald dies aufgrund von Sicherheitsproblemen behoben ist

das verwende ich, aber ich muss auf v0.19.0 upgraden, sobald dies aufgrund von Sicherheitsproblemen behoben ist

Welche Art von Sicherheitsproblemen? v0.18.0 hatte Sicherheitsprobleme, v0.18.1 ist in Ordnung.

NPM markiert während eines Audits immer noch 0.18.1 als anfällig – wahrscheinlich ein Ablenkungsmanöver.

Wenn Sie wie ich axios 0.19 , können Sie die Parameter wie folgt verwalten und es sollte als Workaround vorerst gut funktionieren.

// Pass to create only these params
const instance = axios.create({
  headers,
  baseURL,
  timeout,
});

// Pass others to the instance request
instance.request({
  method,
  url,
  data,
  ...options,
});

Warten auf eine offizielle Lösung 😭

positiv bewerten. habe gerade den Nachmittag damit verbracht, diesem Fehler nachzujagen, und bin hierher gekommen, um ein Problem zu schreiben.

Gibt es Fortschritte bei der Bereitstellung eines Fixups?

https://github.com/axios/axios/blob/v0.19.0/lib/core/mergeConfig.js#L18 -L22

module.exports = function mergeConfig(config1, config2) {
  // eslint-disable-next-line no-param-reassign
  config2 = config2 || {};
  var config = {};

  utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {
    if (typeof config2[prop] !== 'undefined') {
      config[prop] = config2[prop];
    }
  });

der Code v0.19.0 zeigt, dass mergeConfig(axios_instance.defaults, config)
nur die Anfrage config.params wird verwendet.

Warum ist eine Nebenversion nicht mit der Vorgängerversion kompatibel?
Kein Test dafür?
Ich muss fragen.

@magicdawn Ich glaube, sie haben es vermasselt. Ich verstehe nicht, worauf sie warten, um den Fix zusammenzuführen. Bitte @emilyemorehouse , hilf uns mit https://github.com/axios/axios/pull/2196 🙏!

Irgendwelche Neuigkeiten? Ich habe den gleichen Fehler bekommen und dann auf die neueste Version aktualisiert.

Was ist das Problem ist, dass das jemals behoben wird!!

Ich habe eine Weile gebraucht, um dieses Problem zu finden ... ärgerlich. Warte auch auf einen Fix.

Könnte ein Hack sein, aber Sie können auch die get-Methode für eine erstellte Axios-Instanz patchen:

const client = axios.create({
  baseURL: YOUR_URL,
})
client.originalGet = client.get
client.get = (url, { params, ...config }) =>
  client.originalGet(url, {
    ...config,
    params: {
      key: YOUR_API_KEY,
      ...params,
    },
  })


// use it like normal
client.get('/something', { params: paramsToMerge } )

Ich habe die Create-Instanz verpackt und alle Methoden wie folgt gepatcht:

export const createInstance = (config?: AxiosRequestConfig): AxiosInstance => {
  const instance = axios.create(config);

  // Patch methods to merge default params into each request.
  // https://github.com/axios/axios/issues/2190
  for (const [method, configIndex] of methodsToPatch as Array<[keyof AxiosInstance, number]>) {
    const orig = instance[method] as Function;
    // @ts-ignore
    instance[method] = (...args: any[]) => {
      if (!args[configIndex]) {
        args[configIndex] = {};
      }
      args[configIndex].params = {
        ...(instance.defaults.params || {}),
        ...(args[configIndex].params || {}),
      };
      return orig.apply(instance, args);
    };
  }

  return instance;
};

const methodsToPatch = [
  ['getUri', 0],
  ['request', 0],
  ['get', 1],
  ['delete', 1],
  ['head', 1],
  ['post', 2],
  ['put', 2],
  ['patch', 2],
];

Für alle, die nach einer Problemumgehung suchen, können Sie meine verwenden (gilt möglicherweise nicht für alle):

npm i qs

axios.interceptors.request.use(config => {
    config.paramsSerializer = params => qs.stringify({ ...params, myValue: 'foo' });
    return config;
}

@janpantel Ich bin neugierig, warum nicht einfach die Parameter ändern?

axios.interceptors.request.use(config => {
    config.params.myValue = 'foo';
    return config;
}

@janpantel danke ich denke es funktioniert so, ist auch sauberer als die anderen Alternativen

Wir haben einen sehr ähnlichen Fehler.

Tatsächlich können wir nicht einmal eine Instanz params mit axios.create() angeben.
Inzwischen sind wir auf einen Request Interceptor zurückgefallen...

Gleiche für mich. Hat mich heute wahnsinnig gemacht! Alles funktionierte gut. Dann bekam ich plötzlich Authentifizierungsprobleme und CORS-Probleme?! Ja...

Ich habe herausgefunden, dass ich von v18 auf v19 aktualisiert und dann diesen Fehler geerbt habe, denke ich. Es scheint, dass die 'default'-Parameter, die ich in der Instanzdefinition definiert habe (ein Authkey-Parameter der alten Schule), nicht zusammengeführt wurden, als ich diese Instanz später mit neuen Parametern aufrief.

Ein Downgrade auf Version 18 hat es gelöst. Ich hoffe, sie beheben es bald, ich mag alle meine Module auf dem neuesten Stand! :P

Ich wende mich jetzt an umi-request in Knoten und Browser zu verwenden.
So weit, ist es gut. 😄

Das gleiche Problem besteht immer noch seit 2020.
Läuft es wie geplant oder wann kann dieses Problem behoben werden?

Axios-Version: 0.19.0

Danke für die Bereitstellung einer so nützlichen Bibliothek!

v0.19.1 hat diesen Fehler immer noch 😞

Beheben Sie dies bereits. das ist echt nervig. Ich habe 15 Minuten gebraucht, um diesen Fehler zu finden.

Das gleiche Problem hier mit [email protected] . Verwenden von Abfangjägern als Workaround.

Bekomme immer noch das gleiche Problem mit

npm install --save [email protected]

Habe dieses Problem auch. Bitte repariere

eine Art endloses Drama

Es ist nicht einmal so, dass die Instanzparameter nicht mit den Aufrufparametern zusammengeführt würden. Die Instanzparameter gehen überhaupt nicht in die Parameter für die Anfrage ein. Wenn ich eine Instanz erstelle und Parameter definiere, werden sie nie in einer meiner Get-Anfragen gefunden.

Ein Downgrade war die einfachere Option, als die Parameter bei jedem get-Aufruf zu definieren.

Warum ist dieses Thema geschlossen? Wie @renestalder erwähnte, Instanzparameter in einer Anfrage auf, was die Methode create etwas sinnlos macht.

Es ist geschlossen, weil es in #2656 behoben wurde, aber es gibt immer noch keine Version dafür.

Ich habe auch Interceptor als Workaround verwendet, etwas wie @cheelahim vorgeschlagen:

axios.interceptors.request.use(config => {
  config.params. = {
    myValue1: 'foo',
    myValue2: 'bar',
    ...config.params,        
  }
    return config;
}

Warte aber immer noch auf eine neue Version, um diesen Fehler zu beheben.

Axios get & params

      const params = {
        name,
        id,
        pageIndex,
        pageSize,
      };
      const url = `/api/poi/query`;
      axios
      // .get(url, params)
      .get(url, {
        params,
      })
    .then(json => {
        // do something
      })
     .catch(err => console.log(`error`, err));

https://stackoverflow.com/questions/40947650/axios-get-in-url-works-but-with-second-parameter-as-object-it-doesnt

woah! fast 1 Jahr später!

Der Fehler existiert immer noch! Kann es nicht glauben......

Der Fix wurde in #2656 zusammengeführt, aber eine Version dafür wurde noch nicht geschnitten

Einfach auf 0.18.0 . herunterstufen

Warum ist es geschlossen?

Leider ist fetch verfügbar, sobald Sie Fortschrittsereignisse oder Unterstützung bei der Stornierung benötigen.

Pinne deine Version einfach an ^0.18.1 .

Der Wechsel von

Ich habe schon immer gerne Axios verwendet. Aber die Idee, dass dieser Fix schon so lange existiert und niemand es schafft, ihn einer Version zuzuordnen, ist nur ein Witz, es ist Zeit, weiterzumachen. Oder beauftragen Sie jemanden mit der Verwaltung, der das Produkt tatsächlich weiterentwickeln möchte.

Jon Alberhini
Direktor für Technologie
[email protected]
Ö. 802-323-4558 | C. 802-323-4558 | www.legacyresearch.com http://www.legacyresearch.com


Von: Evgeny [email protected]
Gesendet: Donnerstag, 23. April 2020 10:59:32
An: axios/axios [email protected]
Cc: Jon Alberghini [email protected] ; Kommentar [email protected]
Betreff: Re: [axios/axios] Anforderungsparameter werden nicht mit Instanzparametern zusammengeführt (#2190)

@techouse https://github.com/techouse Der Wechsel zu Alternativen ist die bessere Lösung.


Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub https://github.com/axios/axios/issues/2190#issuecomment-618445756 an oder melden Sie sich ab https://github.com/notifications/unsubscribe-auth/AF6OZWIPREAQP5OGY437X3ROBJVJANCNFSM4HRPA6AQ .

Ich denke, es ist geschlossen, weil ein Fix zusammengeführt wurde und in v0.20.0 veröffentlicht werden soll. Siehe hier

Gleiches Problem hier, in der Hoffnung, dass es bald behoben wird!

+1. vorerst downgraden. sm.

@khastation @raphaelbadawi @jonathanalberghini @techouse @AndyOGo

Alternativen:

@mahnunchik
Leider ist fetch verfügbar , sobald Sie Fortschrittsereignisse oder Unterstützung bei der Stornierung benötigen.

@AndyOGo Es kann implementiert werden wie https://javascript.info/fetch-progress

Ich habe meinen Ausweg mit etwas Dekonstruktion gefunden, um den Schlüsselparameter zu trennen. Sicherlich temporärer Code, aber da die Zusammenführung bereits erfolgt ist und 0.20.0 im Gange ist, bin ich wirklich zuversichtlich. Axios ist immer noch mein Weg, auch wenn ich Erfahrung mit fetch() habe. Bei Axios ist es meistens so schlank ;-)

Danke @mahnunchik
Obwohl ich über Fortschrittsereignisse zum Herunterladen und Hochladen spreche!

Danke für deine Frage @bdrtsky
Vor allem aus diesen Gründen:

  • fetch spezifiziert mehrere Regressionen im Vergleich zu XMLHttpRequest
  • Kündigung wird wichtig, sobald Sie große Dienste aufbauen
  • Ich habe einen Datei-Uploader erstellt, daher benötige ich eine ausgefeiltere Verarbeitung des Fortschritts

Dies ist geschlossen, da der Fix bereits der Version 0.20 zugewiesen ist. Wir arbeiten derzeit daran, dass der Punkt 0.20 darin besteht, Regressionen zu beheben und wieder ein stabiles Axios zu veröffentlichen.

Dies ist in Arbeit, für Updates überprüfen Sie das 0.20-Projekt.

Ist es möglich, es in der Patch-Version 0.19.3 zu installieren? Fehler kann nicht geschlossen werden, wenn er nicht in derselben Nebenversion behoben wird...

Ich habe wieder geöffnet, aber wir werden keine 0.19.3 veröffentlichen. Wir möchten Stabilität in einer 0.20-Version erreichen, die alle Regressionen von 0.18.0 auf 0.19.2 entfernt.

Scheint die einzig mögliche Lösung rn ist ein Downgrade.

Wann können wir mit dieser schwer fassbaren Version 0.20 rechnen? Gibt es eine Beta-Version, die wir in der Zwischenzeit verwenden können?

@adamreisnz Ich arbeite an der 0.20-Version, aber es gibt immer noch etwa 60 ungerade Pull-Requests (von 120 ungeraden heruntergefahren), wobei einige sehr alt und unterschiedlich sind, um zu überprüfen und sicherzustellen, dass diese Pull-Requests noch relevant sind. präsentieren Sie keine Breaking Change, führen Sie Tests durch, fügen Sie keine kompilierten Dateien ein usw. usw. Es ist eine Arbeit. Ich bemühe mich, es bestenfalls bis Juli in eine Vorabversion zu bringen. Wir würden uns sehr freuen, wenn wir beim Testen dieser Version helfen würden, da wir es wirklich richtig machen wollen, bevor wir an einer v1 arbeiten.

Es ist ein nerviges Problem, hoffe es kann behoben werden, wird lange gepflegt.

wollen es richtig machen, bevor wir an einer v1 arbeiten

Es gibt viel Platz in 0.x , um weitere Veröffentlichungen vor 1.0.0 vorzunehmen; Sie müssen nicht alles in die nächste Version stopfen. Tatsächlich könnte man argumentieren, dass potenzielle neue Fehler nur schwerer aufzuspüren wären.

@markcarver Sicher könnten wir Axios jedoch derzeit als Vorabversion sehen, da es ohne v1 für die meisten Leute so aussieht, dass Axios keine öffentliche API veröffentlicht hat, siehe SemVer PublicAPI . Mit v0.20.0 möchten wir Stabilität bringen und die meisten Regressionen aus dem 0.19.x-Zweig beheben, da einige Probleme in diesem Zweig auftreten, sowie an Fehlern arbeiten, die leicht zu gewinnen sind.

Gleichzeitig müssen wir auch den Rückstand an Pull-Requests beseitigen. Es ist sehr schwierig, mit 120 Pull-Requests umzugehen, von denen einige schon 2017 stammen. Ich verspreche, wir werden dieses Problem lösen, ich werde nirgendwo hingehen und Axios so gut wie möglich unterstützen und daran arbeiten.

Vielen Dank

Ich denke, es baut sich nur eine Menge Frust auf, weil wir bestimmte Plugins (zB Axios Cache Adapter) nicht verwenden können, es sei denn, wir downgraden und sperren Axios auf v0.18 oder rollen unsere eigene (nicht gewartete) Version und wenden den Fix dort an .

Dies ist jetzt schon seit einigen Monaten der Fall, und ich denke, jeder ist nur daran interessiert, zumindest einige Fixes veröffentlicht zu sehen.

Ist es nicht möglich, einige der derzeit angewendeten Fixes zu portieren und eine 0.19.x zu veröffentlichen, damit wir zumindest die neueste Codebasis verwenden können? Wenn Sie beabsichtigen, weitere 120 Pull-Requests durchzuführen, werden wir leider lange warten, bis wir eine 0.20 oder v1 sehen.

Ich persönlich würde mich nach Möglichkeit für einen inkrementellen Ansatz entscheiden.

@adamreisnz sicher würde ich mich auch für Inkremente entscheiden, aber es wurde viel von 0.18.x auf 0.19.x gebrochen und die Idee war, zu versuchen, eine 0.20.0-Version mit einigen der dringendsten Sachen in dieser Version stabil zu machen. Wir haben nur noch 60 Pull Requests übrig, den Rest habe ich bereits durchgearbeitet und einige dieser 60 sind entweder als wip oder v1 markiert.

Ich weiß, es ist lange her, aber ich möchte es diesmal richtig machen und nicht nur mehr Dinge veröffentlichen und brechen, weil an dieser Stelle das weitgehend möglich ist. Außerdem wird der Build weit verbreitete Tests benötigen, bevor er an die Öffentlichkeit geht. Ich bin frustriert, aber wenn wir es nicht stabil machen und eine Menge Regressionen beheben, könnten wir eine beliebige Anzahl von Inkrementen veröffentlichen und immer noch mit über 200 ~ Problemen und 60 ~ Pull-Requests sitzen, die einfach da sitzen und veraltet werden, sowie ein immer noch sehr kaputtes Axios, vielleicht noch mehr kaputt.

Außerdem kontrolliere ich im Moment keine Releases und als ich anfing zu helfen, habe ich versprochen, einen Build zusammenzustellen, der Regressionen und die dringendsten Probleme behebt und nichts anderes kaputt macht, was zuvor funktioniert hat. Ich nehme das ziemlich ernst und würde das gerne tun.

Ich kann jedoch versuchen, eine 0.18.x-Version mit behobenen Sicherheitsproblemen usw. zu erhalten, wenn dies hilfreich wäre?

Ich kann jedoch versuchen, eine 0.18.x-Version mit behobenen Sicherheitsproblemen usw. zu erhalten, wenn dies hilfreich wäre?

Das wäre super.

PS: Wir alle schätzen die harte Arbeit, die Sie leisten, indem Sie ein Paket pflegen, das für so viele Webprojekte kompliziert ist. 😊

Ich kann jedoch versuchen, eine 0.18.x-Version mit behobenen Sicherheitsproblemen usw. zu erhalten, wenn dies hilfreich wäre?

Ja, dem stimme ich zu, das wäre auf jeden Fall zu begrüßen.

Wenn Sie Hilfe beim Testen einiger der neuen Sachen benötigen, lassen Sie es mich wissen, dass ich dafür offen bin.

@adamreisnz könntest du diesen Branch testen: 0.20.0-beta.1

Ich kann ja, werde versuchen, dieses Wochenende für eines unserer Projekte in diese Filiale zu wechseln.

@jasonsaayman soweit so gut, 0.20.0 scheint gut zu funktionieren

Es scheint, das Problem kann jetzt geschlossen werden

Schließung nach Erhalt von Feedback, dass dies jetzt so funktioniert, wie es unter der neuen Version sollte.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen