В этом посте я покажу, как использовать функции axios transformRequest
и transformResponse
для преобразования snake case
в camel case
для использования в вашем приложении Vue / Vuex.
Исходный код статьи можно найти здесь.
За последние несколько лет я работал над бесчисленным количеством приложений Vue и React, которые поддерживаются API-интерфейсами, созданными с использованием таких языков, как Python, Ruby и Perl. По соглашению, многие серверные языки используют snake case
для переменных и функций. Это часто означает, что я вижу магазины Vuex, которые выглядят так:
Сочетание snake case
для данных, определенных на сервере, и camel case
для данных, определенных во внешнем интерфейсе. Хотя в этом нет ничего плохого, строго говоря, легко изменить ответ, если вы используете axios
, один из самых популярных HTTP-клиентов в последние годы. Поступая так, ваша кодовая база может следовать соглашению JavaScript camel case
, и ваш сервер не станет мудрее. Согласованность важна - это поможет вашему приложению быть более масштабируемым и более простым в обслуживании в долгосрочной перспективе.
В этой статье я буду преобразовывать между snake case
и camel case
, однако эта концепция применима к серверам, использующим другие соглашения, такие как Pascal Case
.
Приложение
Во-первых, очень простое приложение Vue / Vuex с двумя действиями: getUsers
и updateUsers
. getUsers
получает простой JSON, отформатированный в snake case
, и updateUsers
отправляет данные обратно. Конечная цель - преобразовать ответ от запроса getUsers
в camel case
и преобразовать его обратно в snake case
при публикации с updateUsers
.
Он скомпилирован с помощью webpack, index.html
просто имеет тег <script>
, загружающий пакет, и <div id="app">/div>
.
Преобразование запроса с transformRequest
У меня есть сервер, который возвращает ответ в такой форме:
В настоящее время приложение и вывод выглядят следующим образом:
Я хочу преобразовать все ключи (в данном случае first_name
) в случай верблюда. Я могу использовать пакет camelcase-keys
от npm в сочетании с transformResponse
. Обновленное действие выглядит так:
Sinc data
- это строковый объект JSON, нам нужно использовать JSON.parse
перед вызовом camelcaseKeys
. Теперь вывод выглядит следующим образом:
Поскольку мы использовали параметр { deep: true }
, ключи любых вложенных объектов также будут преобразованы.
Преобразование ответа с помощью transformResponse
Когда мы вызываем updateUsers
, мы хотим преобразовать ответ обратно в случай змеи, чтобы сервер правильно интерпретировал данные. Это почти то же самое, что и предыдущая операция. Новое действие updateUsers
выглядит так:
Поскольку запрос уже является допустимым объектом JSON, мы не вызываем JSON.parse
. Скорее, нам нужно JSON.stringify
это, поскольку тело запроса POST должно быть строкой. Щелчок по Обновить данные и проверка вкладки сети показывает, что полезная нагрузка ответа была преобразована обратно в змеиную форму:
Глобальная настройка Axios
Если вы хотите применить преобразования ко всем запросам и ответам, вы можете сделать это глобально следующим образом:
Это позволит вам полностью кодировать приложение, используя обычное соглашение JavaScript о верблюжьем случае, а код на стороне сервера может продолжать работать в случае змеи.
Исходный код статьи можно найти здесь.
Изначально опубликовано в моем личном блоге.