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:
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.
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));
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 .
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
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.
Hilfreichster Kommentar
Warten auf eine offizielle Lösung 😭