1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

axiosのinterceptorを使って、submitするdataを全てスネークケースにする方法

Last updated at Posted at 2024-10-25

はじめに

みなさん、こんにちは torihaziです

今日は実務でタイトルのことをやる機会があって、

色々と調べたのでそれを書き残そうかと思って今書いてます

経緯

frontendとbackendでキャメルケースかスネークケースかで違うと思います。

frontはuserDataみたいなキャメルで、backはrailsだとuser_dataみたいな

スネークケースですよね。

今までもスネークケースにする処理はfrontでやっていたり、

それか

user_data: {
  name: data.hoge
  age: data.age
  ・・・
}

みたいにしてわざわざベタ書きしている箇所もあり統一性がありませんでした。

あと何よりも保守性がよろしくない。

ということでこれを機に手をつけたというわけです。

どうやるか

import { snakeCase } from "change-case";

const METHOD_WITH_PAYLOAD = ["post", "put"];

const convertToSnakeCase = (obj: any): any => {
  if (Array.isArray(obj)) {
    return obj.map(convertToSnakeCase);
  } else if (obj !== null && typeof obj === "object") {
    return Object.entries(obj).reduce(
      (result, [key, value]) => ({
        ...result,
        [snakeCase(key)]: convertToSnakeCase(value)
      }),
      {}
    );
  }

// api: axiosのinstance
api.interceptors.request.use((config: InternalAxiosRequestConfig) => {

  if (
    config.method &&
    METHOD_WITH_PAYLOAD.includes(config.method.toLowerCase())
  ) {
    config.data = convertToSnakeCase(config.data);
  }

  return config;
}

  

これをすれば、postかputの時だけ全部勝手にsnakecaseに変換してbackendに飛ばしてくれます

終わりに

以上!

実務でやって初めてこういう変換処理を加えるべきなんだと思いました

まだまだ発展途上です

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?