Axios: Параметры запроса не объединяются с параметрами экземпляра

Созданный на 31 мая 2019  ·  83Комментарии  ·  Источник: axios/axios

Опишите ошибку

Конкретные параметры запроса не объединяются с параметрами экземпляра по умолчанию.

Воспроизводить

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

Что происходит, так это то, что объект param запроса переопределяет объект param по умолчанию экземпляра. Экземпляр больше не имеет параметра запроса q .

Ожидаемое поведение

Согласно документации, все параметры конфигурации объединены . https://github.com/axios/axios#instance -methods

Я ожидал, что запрос будет содержать параметры q и page . Так же и в версии 0.18.0, как я заметил.

Среда:

  • Версия Axios: 0.19.0
  • ОС: 10.14.5 (18F132)
  • Браузер: Node Express и Chrome
  • Браузер: Node 10.15.0, версия Chrome 74.0.3729.169 (официальная сборка) (64-разрядная версия)

Самый полезный комментарий

Жду официального исправления 😭

Все 83 Комментарий

Вот рабочий пример - https://runkit.com/philipbjorge/axios-regression

Имеется аналогичная проблема с нашими токенами аутентификации на основе сеанса, которые не объединяются.

Я _ верю_, что исправить это так же просто, как переместить params в свойство в раздел deepMergeProperties . Здесь отличия: https://github.com/axios/axios/compare/8d0b92b2678d96770304dd767cd05a59d37f12cf...zackseuberling : zs-fix-merge-params

@zackseuberling, не могли бы вы добавить для этого

У меня такая же проблема.

Тесты @jasonsaayman теперь проходят (как я предполагаю, правильное поведение) в # 2196

надеюсь, скоро выйдет, проблема меня сильно раздражала

Имея ту же проблему. Когда это будет исправлено?

То же самое и здесь @wphestiraid 😬

Переход на 0.18.1 исправил эту проблему в качестве временного решения! В этом исправлена ​​уязвимость системы безопасности.

@serranoarevalo Я думаю, мы можем использовать 0.18.1 : smile:

Похоже, это также происходит с method , если он указан только в вызове create а не в request . Мне потребовался целый день, чтобы понять это, определенно критическое изменение. (Это должна быть отдельная проблема или часть той же общей проблемы?)

Такая же проблема здесь

есть новости об этом? когда это будет исправлено?

есть новости об этом? когда это будет исправлено?

Просто используйте пока что v0.18.1 . ✈️

это то, что я использую, но мне нужно перейти на v0.19.0 только это будет исправлено из-за проблем с безопасностью

это то, что я использую, но мне нужно перейти на v0.19.0 только это будет исправлено из-за проблем с безопасностью

Какие проблемы с безопасностью? v0.18.0 были проблемы с безопасностью, v0.18.1 в порядке.

NPM по-прежнему отмечает 0.18.1 как уязвимую во время аудита - вероятно, отвлекающий маневр.

Если вам нужно использовать axios 0.19 как я, вы можете управлять такими параметрами, и сейчас это должно работать нормально в качестве обходного пути .

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

Жду официального исправления 😭

проголосовать. просто потратил день на поиски этой ошибки и пришел сюда, чтобы написать о проблеме.

Есть ли прогресс в исправлении ошибок?

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

код v0.19.0 показывает, что mergeConfig(axios_instance.defaults, config)
используется только запрос config.params.

Почему дополнительная версия не совместима с предыдущей версией?
Нет теста на это?
Я должен спросить.

@magicdawn Я думаю, они @emilyemorehouse , помогите нам с https://github.com/axios/axios/pull/2196 🙏!

Любые новости? Я получил ту же ошибку, затем обновился до последней версии.

В чем проблема, это когда-нибудь будет исправлено !!

Мне потребовалось время, чтобы найти эту проблему ... раздражающей. Жду исправления тоже.

Возможно, это взлом, но вы также можете исправить метод get для созданного экземпляра axios:

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

Я завернул экземпляр create и пропатчил все методы следующим образом:

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

Для всех, кто ищет обходной путь, вы можете использовать мой (может не применяться ко всем):

npm i qs

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

@janpantel Мне любопытно, почему бы просто не изменить параметры?

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

@janpantel спасибо, я думаю, это работает так, также чище, чем другие альтернативы

У нас очень похожая ошибка.

Фактически мы даже не можем указать какой-либо экземпляр params с axios.create() .
Тем временем мы вернулись к перехватчику запросов ...

Мне то же. Сдвинул меня сегодня с ума! Все работало нормально. Затем внезапно у меня возникли проблемы с аутентификацией и проблемы с CORS ?! Ярг ...

Я выяснил, что обновился с v18 до v19, а затем унаследовал эту ошибку, я думаю. Похоже, что параметры по умолчанию, которые я определил в определении экземпляра (параметр authkey старой школы), не объединялись, когда я позже вызвал этот экземпляр с новыми параметрами, новые параметры уничтожили значения по умолчанию :(.

Понижение до версии 18 решило это. Надеюсь, они скоро это исправят, мне нравятся все мои модули в актуальном состоянии! :П

Я перехожу к использованию umi-запроса в узле и браузере.
Все идет нормально. 😄

Та же проблема сохраняется с 2020 года.
Работает ли он должным образом или когда можно решить эту проблему?

Версия Axios: 0.19.0

Спасибо за такую ​​полезную библиотеку!

v0.19.1 все еще имеет эту ошибку 😞

Исправьте это уже. это действительно раздражает. мне потребовалось 15 минут, чтобы понять эту ошибку.

Та же проблема здесь с использованием [email protected] . Использование перехватчиков в качестве обходного пути.

По-прежнему возникает такая же проблема с

npm install --save [email protected]

Имея и эту проблему. Пожалуйста исправьте

какая-то бесконечная драма

Дело даже не в том, что параметры экземпляра не будут объединены с параметрами вызова. Параметры экземпляра вообще не входят в параметры запроса. Если я создаю экземпляр и определяю параметры, они никогда не будут найдены в одном из моих запросов на получение.

Понижение версии было более простым вариантом, чем определение параметров при каждом вызове get.

Почему этот вопрос закрыт? Как упоминал @renestalder , в последней версии ни один из параметров экземпляра не появляется ни в одном запросе, что делает метод create несколько бессмысленным.

Он закрыт, потому что исправлен в # 2656, но для него до сих пор нет версии.

Я также использовал перехватчик в качестве обходного пути, что-то вроде @cheelahim предложил:

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

Но все еще жду новой версии, чтобы исправить эту ошибку.

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

воах! почти год спустя!

Ошибка все еще существует! Не могу поверить ...

Исправление было объединено в # 2656, но версия для него еще не вырезана.

Просто перейдите на 0.18.0

Почему закрыто?

К сожалению, fetch недоступен, как только вам понадобятся события прогресса или поддержка отмены.

Просто закрепите свою версию на ^0.18.1 .

@techouse переход на альтернативы - лучшее решение.

Мне всегда нравились аксиомы. Но идея о том, что это исправление существует уже давно и никому не удается назначить его какой-либо версии, просто шутка, пора двигаться дальше. Или попросите кого-нибудь управлять этим, кто действительно хочет продвигать продукт.

Джон Альбергини
Директор по технологиям
[email protected]
о. 802-323-4558 | c. 802-323-4558 | www.legacyresearch.com http://www.legacyresearch.com


От: Евгений [email protected]
Отправлено: четверг, 23 апреля 2020 г., 10:59:32
Кому: axios / axios [email protected]
Копия: Джон Альбергини [email protected] ; Комментарий [email protected]
Тема: Re: [axios / axios] Параметры запроса не объединяются с параметрами экземпляра (# 2190)

@techouse https://github.com/techouse переход на альтернативы - лучшее решение.

-
Вы получили это, потому что прокомментировали.
Ответьте на это электронное письмо напрямую, просмотрите его на GitHub https://github.com/axios/axios/issues/2190#issuecomment-618445756 или откажитесь от подписки https://github.com/notifications/unsubscribe-auth/AF6OZWIPRREAQP5OGY437X3ROBJVJANC .

Я думаю, что он закрыт, потому что исправление было объединено и должно быть выпущено в v0.20.0. Здесь

Здесь та же проблема, надеюсь, она скоро будет исправлена!

+1. переход на более раннюю версию. smh.

@khastation @raphaelbadawi @jonathanalberghini @techouse @AndyOGo

Альтернативы:

@mahnunchik
К сожалению, fetch недоступен, как только вам понадобятся события прогресса или поддержка отмены .

@AndyOGo Это может быть реализовано как https://javascript.info/fetch-progress

Я нашел выход, используя некоторую деконструкцию для разделения ключевого параметра. Временный код, конечно, но поскольку слияние уже выполнено и 0.20.0 в процессе, я действительно уверен. Axios - это мой путь, даже если у меня есть опыт работы с fetch (). Обычно с Axios дела обстоят так скудно ;-)

Спасибо @mahnunchik
Хотя я говорю о прогрессе для скачивания и закачки !

Спасибо за вопрос @bdrtsky
В основном по этим причинам:

  • fetch указывает несколько регрессий по сравнению с XMLHttpRequest
  • отмена становится важной, как только вы создаете крупномасштабные услуги
  • Я создал загрузчик файлов, поэтому мне нужна более сложная обработка хода выполнения.

Это закрыто, так как исправление уже назначено выпуску 0.20. В настоящее время мы работаем над выпуском версии 0.20, чтобы исправить ошибки и снова выпустить стабильную версию Axios.

Это работа, наличие обновлений проверяйте в проекте 0.20.

Можно ли поставить в патч версии 0.19.3? Дефект нельзя закрыть, если он не исправлен в той же минорной версии ...

Я повторно открылся, но мы не будем выпускать версию 0.19.3. Мы хотели бы получить стабильность в выпуске 0.20, который устраняет все регрессии с 0.18.0 до 0.19.2.

Кажется, единственно возможное решение - понизить рейтинг.

Когда мы можем ожидать эту неуловимую версию 0.20? Есть ли бета-версия, которую мы можем использовать в настоящее время?

@adamreisnz Я работаю над выпуском 0.20, но все еще существует около 60 лишних запросов на вытягивание (снизилось с 120 с лишним), при этом некоторые из них очень старые и различаются по объему работы по проверке и обеспечению того, чтобы эти запросы на вытягивание по-прежнему актуальны, не вносить критических изменений, проводить тесты, не включать скомпилированные файлы и т. д. и т. д. это труд. Я стараюсь сделать предварительный релиз в лучшем случае к июлю. Нам бы очень хотелось помочь в тестировании этого выпуска, поскольку мы действительно хотим получить его как следует, прежде чем приступить к работе над v1.

Это досадная проблема, надеюсь, что ее можно исправить, сохраняется долгое время.

хочу сделать это правильно, прежде чем мы будем работать над v1

В 0.x для выпуска дополнительных выпусков до 1.0.0 ; вам не нужно втискивать все в следующий выпуск. Фактически, можно утверждать, что это только усложнит отслеживание потенциальных новых ошибок.

@markcarver Конечно, мы могли бы, однако, в настоящее время SemVer PublicAPI . В v0.20.0 мы хотели бы обеспечить стабильность и исправить большинство регрессов из ветки 0.19.x, поскольку некоторые проблемы, представленные в этой ветке, а также поработать над ошибками, которые легко решить.

Нам также необходимо одновременно очистить накопившиеся запросы на вытягивание. Очень сложно иметь дело с 120 лишними запросами на перенос, где некоторые из них были еще в 2017 году. Я обещаю, что мы доберемся до этой проблемы, я никуда не уйду и буду поддерживать Axios и работать над ним, насколько это возможно.

Спасибо

Я думаю, что возникает много разочарования, потому что мы не можем использовать определенные плагины (например, адаптер кеша axios), если мы не понизим и не заблокируем Axios на v0.18, или не откатим нашу собственную (не поддерживаемую) версию и не применим исправление там .

Так было уже несколько месяцев, и я думаю, что все просто хотят, чтобы были выпущены хотя бы некоторые исправления.

Возможно ли перенести некоторые из применяемых в настоящее время исправлений и выпустить версию 0.19.x, чтобы, по крайней мере, мы могли использовать самую последнюю кодовую базу? Если вы намереваетесь пройти еще 120 запросов на включение, я боюсь, что мы будем долго ждать, пока не увидим версию 0.20 или v1.

Я бы лично предпочел более постепенный подход, если это возможно.

@adamreisnz уверен, что я бы тоже выбрал приращения, но было много ошибок с 0.18.x до 0.19.x, и идея заключалась в том, чтобы попытаться сделать выпуск 0.20.0 стабильным с некоторыми из самых важных вещей в этом выпуске. У нас осталось только 60 запросов на вытягивание, я уже проработал остальные, и некоторые из этих 60 либо помечены как wip либо v1 .

Я знаю, что прошло много времени, но на этот раз я хотел бы все исправить, а не просто выпустить и сломать больше вещей, потому что на данный момент это в значительной степени возможно. Также сборка потребует широкого тестирования, прежде чем она станет общедоступной. Я испытываю разочарование, но если мы не сделаем его стабильным и не исправим кучу регрессий, мы сможем выпустить любое количество инкрементов, и все равно останемся с более чем 200 ~ проблемами и 60 ~ запросами на перенос, которые просто будут устаревать, а также все еще очень сломанный Axios, может быть, еще более сломанный.

Вдобавок я не контролирую выпуски на данный момент, и когда я начал помогать, я пообещал собрать сборку, которая исправит регрессии и самые насущные проблемы, а также не нарушит ничего, что работало раньше. Я отношусь к этому довольно серьезно и хотел бы это сделать.

Однако я могу попробовать получить выпуск 0.18.x с исправленными проблемами безопасности и т. Д., Если это поможет?

Однако я могу попробовать получить выпуск 0.18.x с исправленными проблемами безопасности и т. Д., Если это поможет?

Это было бы круто.

PS: Мы все ценим тяжелую работу, которую вы выполняете, поддерживая пакет, который является сложным для многих веб-проектов. 😊

Однако я могу попробовать получить выпуск 0.18.x с исправленными проблемами безопасности и т. Д., Если это поможет?

Да, я согласен, это определенно будет оценено.

Если вам понадобится помощь в тестировании новых вещей, дайте мне знать, что я готов это сделать.

@adamreisnz не могли бы вы протестировать эту ветку: 0.20.0-beta.1

Я могу, да, попробую перейти на эту ветку в эти выходные для одного из наших проектов.

@jasonsaayman пока все хорошо, 0.20.0 вроде работает хорошо 👍

Кажется, сейчас вопрос можно закрыть

Закрытие после получения отзывов о том, что теперь это работает должным образом в новом выпуске.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги