◆結論
qs : [New] stringily
: Add serializeDate
option to customize Date serialization.
◆やりかた
- dayjsをyarn add(あるいはnpm install)
- qsをyarn 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」的なオフセット文字を取得できることを確認。
結論のコードを実装。おわり。
◆結論
ペヤングのまるか食品もだけど、客を舐めすぎですよね。「アッチャー!まちごうた😖」と思ったら、もう誠心誠意謝ればいいじゃん。なんで逆切れしたり圧力かけたりしようとするんだろう。客の荷物を勝手に開けて捨てるってなんだよ。
「ゴミだと思った」はどう考えても嘘だろうから、なにか倒して壊しちゃったとかでしょ?知らんけど。だったらもう全力で謝ればいいじゃないか。なんで誤魔化す。誤魔化したいのはわかるけど、違うじゃないか。相手が泣き寝入りするのに賭けるって卑怯にも程がある。その賭けは勝利させてはいけない。そうだろ。
コメントを残す