◆結論

qs : [New] stringily: Add serializeDate option to customize Date serialization.

◆やりかた

  • dayjsyarn add(あるいはnpm install)
  • qsyarn add
  • ふつうTypeSciptを使ってるはずなので、「yarn add @types/qs」もする。
  • ここを眺めて、ある程度理解する。
  • 下の感じにする。

※ほぼJavaScriptと変わらんが、TypeScriptの書き方だよ。

baseAxios.interceptors.request.use((config) => {
  config.paramsSerializer = (params) => qs.stringify(params, {
    serializeDate: (date: Date) => dayjs(date).format('YYYY-MM-DDTHH:mm:ssZ') });
  return config;
})

◆qsらへんの解説してた記事

◆事象

GETのクエリパラメータに日付が入ったときに誤作動を起こした。

F12でクエリ文字列を確認した結果、日付がUTCのオフセットなしに変換されていたんですね。つまり、

2019-11-01T12:00:00+09:00

だったDateが、まず

2019-11-01T03:00:00+00:00

に変換され、さらにオフセット情報が消えて送信された。客の荷物を勝手に捨てるな

dayjsっていうイカしたライブラリで日付を扱っていたんだが、その変換が間違えたんかなと思って調査した。でも大丈夫そう。つまりaxiosくんがおかしい。

◆ググりかた

いつもの。

GETだけおかしいんだから、つまりクエリ文字列に変換する処理がおかしい。以前に、ネストしたデータのGET要求が妙な変換をされたことがあった。その時は「qs」というライブラリを設定した記憶があったんで、まずqsのGitHubページに行く。

大抵、俺が悩む前に別の人が悩んでいるわけだから、Issueを掘る。GitHubは、ページの左上に「Search or jump to…」という検索窓がある。そこに「date」と入力。「In this repository」で検索。

「Code」が検索されてくるが、Issue見た方が大抵の場合早いので「Issues」をクリック。

Date formatというIssueを発見。プルリクによりクローズされているのでプルリクを確認。

「serializeDate」っていうパラメータが追加されていて、functionを食わせることが出来るらしい。それが分かればこっちのものなので、良い感じにConvertする処理をdayjsで書きたくなる。

dayjsのAPI Referenceを確認しにいく。「format」とページ内検索をかけ、フォーマットルールの見出しを発見。「Z」で「+05:00」的なオフセット文字を取得できることを確認。

結論のコードを実装。おわり。

◆結論

ペヤングのまるか食品もだけど、客を舐めすぎですよね。「アッチャー!まちごうた😖」と思ったら、もう誠心誠意謝ればいいじゃん。なんで逆切れしたり圧力かけたりしようとするんだろう。客の荷物を勝手に開けて捨てるってなんだよ。

「ゴミだと思った」はどう考えても嘘だろうから、なにか倒して壊しちゃったとかでしょ?知らんけど。だったらもう全力で謝ればいいじゃないか。なんで誤魔化す。誤魔化したいのはわかるけど、違うじゃないか。相手が泣き寝入りするのに賭けるって卑怯にも程がある。その賭けは勝利させてはいけない。そうだろ。