Axios: Los parámetros de solicitud no se fusionan con los parámetros de instancia

Creado en 31 may. 2019  ·  83Comentarios  ·  Fuente: axios/axios

Describe el error

Los parámetros de solicitud específicos no se fusionan con los parámetros predeterminados de la instancia.

Reproducir

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

Lo que sucede es que el objeto de parámetro de solicitud anula el objeto de parámetro predeterminado de la instancia. La instancia ya no tiene un parámetro de consulta de q .

Comportamiento esperado

Según los documentos, todas las opciones de configuración se combinan . https://github.com/axios/axios#instance -methods

Esperaba que la solicitud contuviera los parámetros q y page . Así es también como funcionaba en la versión 0.18.0, que es como me di cuenta.

Medio ambiente:

  • Versión de Axios: 0.19.0
  • Sistema operativo: 10.14.5 (18F132)
  • Navegador: Node Express y Chrome
  • Navegador: Nodo 10.15.0, versión de Chrome 74.0.3729.169 (compilación oficial) (64 bits)
review

Comentario más útil

Esperando una solución oficial 😭

Todos 83 comentarios

Aquí hay un ejemplo de ejecución: https://runkit.com/philipbjorge/axios-regression

Tener un problema similar con nuestros tokens de autenticación basados ​​en sesión que tampoco se fusionan.

Creo que la solución es tan simple como mover params de la propiedad a la sección deepMergeProperties . Diferencia aquí: https://github.com/axios/axios/compare/8d0b92b2678d96770304dd767cd05a59d37f12cf...zackseuberling : zs-fix-merge-params

@zackseuberling, ¿ podrías incluir una solicitud de extracción para esto?

Tengo el mismo problema.

Las pruebas de

espero que se publique pronto, el problema me puso bastante molesto

Tener el mismo problema. ¿Cuándo se va a arreglar?

Lo mismo aquí @wphestiraid 😬

¡La degradación a 0.18.1 lo solucionó como una solución! Eso tiene la vulnerabilidad de seguridad corregida.

@serranoarevalo creo que podemos usar 0.18.1 : smile:

Esto parece suceder también con method , si solo se especifica en la llamada create y no en request . Me tomó todo el día darme cuenta de eso, definitivamente un cambio radical. (¿Debería tratarse de un tema aparte o es parte del mismo problema general?)

Mismo problema aquí

alguna noticia sobre este? cuando se arreglará?

alguna noticia sobre este? cuando se arreglará?

Simplemente use v0.18.1 por el momento. ✈️

eso es lo que estoy usando, pero necesito actualizar a v0.19.0 una vez que esto se solucione debido a problemas de seguridad

eso es lo que estoy usando, pero necesito actualizar a v0.19.0 una vez que esto se solucione debido a problemas de seguridad

¿Qué tipo de problemas de seguridad? v0.18.0 tuvo problemas de seguridad, v0.18.1 está bien.

NPM todavía marca a 0.18.1 como vulnerable durante una auditoría, probablemente una pista falsa.

Si necesita usar axios 0.19 como yo, puede administrar los parámetros de esta manera y debería funcionar bien por ahora como solución alternativa .

// 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,
});

Esperando una solución oficial 😭

voto a favor. Pasé la tarde persiguiendo este error y vine aquí para escribir un número.

¿Hay algún progreso para proporcionar una reparación?

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];
    }
  });

el código v0.19.0 muestra que mergeConfig(axios_instance.defaults, config)
solo se usa la solicitud config.params.

¿Por qué una versión secundaria no es compatible con la versión anterior?
¿No hay prueba para esto?
Tengo que preguntar.

@magicdawn Creo que se favor @emilyemorehouse , ayúdenos con https://github.com/axios/axios/pull/2196 🙏!

¿Hay noticias? Recibí el mismo error y luego actualicé a la última versión.

¿Cuál es el problema? ¡¡Esto alguna vez se solucionará !!

Me tomó un tiempo encontrar este problema ... molesto. Esperando una solución también.

Puede ser un truco, pero también puede parchear el método get para una instancia de axios creada:

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 } )

Envolví la instancia de creación y parcheé todos los métodos de esta manera:

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],
];

Para todos los que buscan una solución alternativa, puede usar la mía (puede que no se aplique a todos):

npm i qs

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

@janpantel Tengo curiosidad, ¿por qué no modificar los parámetros?

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

@janpantel gracias creo que funciona de esa manera, además es más limpio que las otras alternativas

Tenemos un error muy similar.

De hecho, ni siquiera podemos especificar ninguna instancia params con axios.create() .
Mientras tanto, volvimos a un interceptor de solicitudes ...

Lo mismo para mi. ¡Me volvió loco hoy! Todo estaba funcionando bien. ¡¿Entonces, de repente, tenía problemas de autenticación y problemas de CORS ?! Yargh ...

Me di cuenta de que había actualizado de v18 a v19 y luego heredé este error, supongo. Parece que los parámetros 'predeterminados' que definí en la definición de instancia (un parámetro de clave de autenticación de la vieja escuela) no se fusionaban cuando llamé a esa instancia más adelante con nuevos parámetros, los nuevos parámetros eliminaron los valores predeterminados :(.

Bajado a la versión 18 lo solucionó. Sin embargo, espero que lo solucionen pronto, ¡me gustan todos mis módulos actualizados! :PAG

Ahora uso umi-request en el nodo y el navegador.
Hasta ahora, todo bien. 😄

El mismo problema sigue saliendo desde 2020.
¿Funciona según lo diseñado o cuándo se puede resolver este problema?

Versión de Axios: 0.19.0

¡Gracias por proporcionar una biblioteca tan útil!

v0.19.1 todavía tiene este error 😞

Arregle esto ya. esto es realmente molesto. Me tomó 15 minutos resolver este error.

El mismo problema aquí usando [email protected] . Usar interceptores como solución.

Sigo teniendo el mismo problema con [email protected]. Reducir axios para que funcione.

npm install --save [email protected]

Tener este problema también. Por favor, arregla

una especie de drama sin fin

Ni siquiera es que los parámetros de la instancia no se fusionen con los parámetros de la llamada. Los parámetros de la instancia no entran en los parámetros de la solicitud en absoluto. Si creo una instancia y defino parámetros, nunca se encuentran en una de mis solicitudes de obtención.

La degradación fue la opción más fácil que definir los parámetros con cada llamada get.

¿Por qué está cerrado este problema? Como mencionó @renestalder , en la última versión, ninguno de los parámetros de la instancia aparece en ninguna solicitud, lo que hace que el método create algo inútil.

Está cerrado porque está arreglado en el n. ° 2656, pero todavía no hay una versión para él.

También utilicé interceptor como solución alternativa, algo como @cheelahim sugirió:

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

Pero todavía estoy esperando una nueva versión para corregir este error.

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! ¡casi 1 año después!

¡El error todavía existe! No puedo creer ...

La solución se ha fusionado en # 2656, pero aún no se ha eliminado una versión.

Simplemente baje a 0.18.0

¿Por qué está cerrado?

Desafortunadamente, fetch sale tan pronto como necesitas eventos de progreso o soporte de cancelación.

Simplemente fija tu versión a ^0.18.1 .

@techouse cambiar a alternativas es una mejor solución.

Siempre me ha gustado usar axios. Pero la idea de que esta solución ha estado ahí durante tanto tiempo y nadie puede asignarla a una versión es solo una broma, es hora de seguir adelante. O consiga a alguien que gestione esto y que realmente quiera hacer progresar el producto.

Jon Alberghini
Director de Tecnología
[email protected]
o. 802-323-4558 | C. 802-323-4558 | www.legacyresearch.com http://www.legacyresearch.com


De: Evgeny [email protected]
Enviado: jueves 23 de abril de 2020 10:59:32 a.m.
Para: axios / axios [email protected]
Cc: Jon Alberghini [email protected] ; Comentario [email protected]
Asunto: Re: [axios / axios] Los parámetros de solicitud no se fusionan con los parámetros de instancia (# 2190)

@techouse https://github.com/techouse moverse a alternativas es una mejor solución.

-
Estás recibiendo esto porque hiciste un comentario.
Responda a este correo electrónico directamente, véalo en GitHub https://github.com/axios/axios/issues/2190#issuecomment-618445756 , o cancele la suscripción https://github.com/notifications/unsubscribe-auth/AF6OZWIPRREAQP5OGY437X3ROBJVJANCNFSAQ .

Creo que está cerrado porque se ha fusionado una solución y se supone que se lanzará en la versión v0.20.0. Ver aqui

¡El mismo problema aquí, esperando que se solucione pronto!

+1. degradando por ahora. smh.

@khastation @raphaelbadawi @jonathanalberghini @techouse @AndyOGo

Alternativas:

@mahnunchik
Desafortunadamente, fetch sale tan pronto como necesite eventos de progreso o soporte de cancelación .

@AndyOGo Se puede implementar como https://javascript.info/fetch-progress

Encontré mi salida usando un poco de deconstrucción para separar el parámetro clave. Código temporal seguro, pero como la fusión ya está hecha y 0.20.0 está en marcha, tengo mucha confianza. Axios sigue siendo mi camino a seguir, incluso si tengo experiencia con fetch (). Las cosas suelen ser tan sencillas con Axios ;-)

Gracias @mahnunchik
¡Aunque estoy hablando de eventos de progreso para descargar y cargar !

Gracias por tu pregunta @bdrtsky
Principalmente por estas razones:

  • fetch especifica varias regresiones en comparación con XMLHttpRequest
  • la cancelación se vuelve importante tan pronto como construye servicios a gran escala
  • Creé un cargador de archivos, por lo que necesito un manejo de progreso más sofisticado

Esto está cerrado debido a que la corrección ya está asignada a la versión 0.20. Actualmente estamos trabajando en ese lanzamiento, el punto de 0.20 es arreglar las regresiones y lanzar un Axios estable nuevamente.

Este es un trabajo en progreso, para actualizaciones verifique el proyecto 0.20.

¿Es posible ponerlo en la versión de parche 0.19.3? El defecto no se puede cerrar si no se soluciona en la misma versión menor ...

He vuelto a abrir pero no lanzaremos un 0.19.3. Nos gustaría ganar estabilidad en una versión de 0.20 que elimine toda la regresión de 0.18.0 a 0.19.2.

Parece que la única solución posible rn es bajar de categoría.

¿Cuándo podemos esperar esta elusiva liberación de 0,20? ¿Existe una versión beta que podamos usar mientras tanto?

@adamreisnz Estoy trabajando en el lanzamiento de 0.20 pero todavía hay alrededor de 60 solicitudes de extracción impares (bajé esto de 120 impares), y algunas son muy antiguas y una cantidad de trabajo variada para verificar y asegurarse de que estas solicitudes de extracción sigan siendo relevantes, no presente un cambio importante, realice pruebas, no incluya archivos compilados, etc., es una labor. Me esfuerzo por intentar ponerlo en un prelanzamiento para julio en el mejor de los casos. Nos encantaría ayudar a probar esta versión, ya que realmente queremos hacerlo bien antes de trabajar en una versión v1.

Es un problema molesto, espero que se pueda solucionar, se mantiene durante mucho tiempo.

queremos hacerlo bien antes de trabajar en un v1

Hay mucho espacio en 0.x para realizar lanzamientos adicionales antes de 1.0.0 ; no tiene que meter todo en la próxima versión. De hecho, se podría argumentar que eso haría que los posibles errores nuevos fueran más difíciles de rastrear.

@markcarver Seguro que podríamos, sin embargo, Axios se considera una versión preliminar en la actualidad, ya que sin una versión 1, la mayoría de la gente considera que Axios no ha lanzado una API pública, consulte SemVer PublicAPI . Con v0.20.0 nos gustaría traer estabilidad y corregir la mayoría de las regresiones de la rama 0.19.x como algunos problemas presentados en esta rama, así como trabajar en errores que son fáciles de ganar.

También necesitamos eliminar la acumulación de solicitudes de extracción al mismo tiempo. Es muy difícil lidiar con 120 solicitudes de extracción extrañas donde algunas de ellas eran desde 2017. Prometo que llegaremos a este problema, no voy a ninguna parte y apoyaré y trabajaré en Axios tanto como pueda.

Gracias

Creo que hay mucha frustración acumulada, porque no podemos usar ciertos complementos (por ejemplo, el adaptador de caché de axios) a menos que bajemos y bloqueemos Axios en v0.18, o lancemos nuestra propia versión (sin mantenimiento) y apliquemos la solución allí. .

Este ha sido el caso durante varios meses, y creo que todos están ansiosos por ver al menos algunas correcciones lanzadas.

¿No es posible portar algunas de las correcciones aplicadas actualmente y lanzar un 0.19.x para que al menos podamos usar la base de código más reciente? Si tiene la intención de pasar por otras 120 solicitudes de extracción, me temo que estaremos esperando mucho tiempo hasta que veamos un 0.20 o v1.

Personalmente, optaría por un enfoque más incremental, si es posible.

@adamreisnz estoy seguro de que también optaría por incrementos, pero hubo muchos cambios de 0.18.xa 0.19.xy la idea era intentar hacer una versión de 0.20.0 estable con algunas de las cosas más urgentes en esa versión. Solo nos quedan 60 solicitudes de extracción, ya he trabajado con el resto y algunas de esas 60 están etiquetadas como wip o v1 .

Sé que ha pasado mucho tiempo, pero me gustaría hacerlo bien esta vez y no solo lanzar y romper más cosas porque en este punto eso es en gran medida posible. Además, la compilación necesitará pruebas de amplia difusión antes de que se haga pública. Me da frustración, pero si no lo estabilizamos y arreglamos un montón de regresiones, podríamos liberar cualquier cantidad de incrementos, y aún así quedarnos con más de 200 problemas y 60 solicitudes de extracción que simplemente se quedan obsoletas, así como un Axios todavía muy roto, tal vez incluso más roto.

Además, no controlo las versiones en este momento y cuando comencé a ayudar, prometí armar una compilación que solucionaría las regresiones y los problemas más urgentes, además de no romper nada más que funcionara anteriormente. Me lo tomo muy en serio y me gustaría hacerlo.

Sin embargo, puedo intentar obtener una versión 0.18.x con cualquier problema de seguridad, etc. solucionado si eso es algo que ayudaría.

Sin embargo, puedo intentar obtener una versión 0.18.x con cualquier problema de seguridad, etc. solucionado si eso es algo que ayudaría.

Que sería increíble.

PD: Todos apreciamos el arduo trabajo que está haciendo al mantener un paquete que es intrincado para tantos proyectos web. 😊

Sin embargo, puedo intentar obtener una versión 0.18.x con cualquier problema de seguridad, etc. solucionado si eso es algo que ayudaría.

Sí, estoy de acuerdo, eso definitivamente se agradecería.

Si necesita ayuda para probar algunas de las cosas nuevas, avíseme que estaría dispuesto a hacerlo.

@adamreisnz ¿ podrías probar esta rama: 0.20.0-beta.1

Sí, puedo intentar cambiar a esa sucursal este fin de semana para uno de nuestros proyectos.

@jasonsaayman hasta ahora todo bien, 0.20.0 parece estar funcionando bien 👍

Parece que el problema se puede cerrar ahora.

Cierre después de recibir comentarios de que esto ahora está funcionando como debería con la nueva versión.

¿Fue útil esta página
0 / 5 - 0 calificaciones