Closed19

axios 1.0.0 を確認する

shingo.sasakishingo.sasaki

AxiosError オブジェクトにスタックトレースが追加された

https://github.com/axios/axios/pull/4624

エラー発生時にスタックトレースを AxiosError オブジェクトに追加する。

axios.get("/hoge").catch((e: AxiosError) => {
  console.log(e.stack);
});

ただし利用されている Error.captureStackTrace は非標準機能であるため、環境によって挙動が変わることがある。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Error#静的メソッド

shingo.sasakishingo.sasaki

AxiosStatic 型への toFormData フィールドの追加

https://github.com/axios/axios/pull/4668

toFormData は 0.27 で追加された、オブジェクトを FormData 形式に変換するヘルパー関数。
これが TypeScript から参照できていなかったらしい

import axios from "axios";

const formData = axios.toFormData({
  foo: "bar",
  baz: 123,
  qux: ["a", "b", "c"],
});
console.log(`${formData}`); // [object FormData]
shingo.sasakishingo.sasaki

AbortController 使用時に、DOM Library に依存しないようにする

https://github.com/axios/axios/pull/4229

import axios from "axios";
axios.get("/user", { signal: {
  // ここの話
}});

リクエストのキャンセルなどに使用する AbortController は、Node にも実装されているのに、 axios 上では DOM Library 上の AbortController の型を使用しいた。

そのため、以下のように tsconfig.json では DOM Library への参照が必要なってしまう。

tsconfig.json
{
  "compilerOptions": {
    "lib": ["DOM"]
  }
}

これが修正され、標準ライブラリに依存しない型定義が追加されたため、 tsconfig.json に関係なく型を参照できるようになった。

shingo.sasakishingo.sasaki

追加されたインターセプタをすべて破棄するメソッドの追加

https://github.com/axios/axios/pull/4248

eject を一括でできるようになったみたいな。

const instance = axios.create();
instance.interceptors.request.use(() => {});
instance.interceptors.request.clear();

instance.interceptors.response.use(() => {});
instance.interceptors.response.clear();

そしてこれも型定義の追加が忘れられててTSからは使えないぞ。

shingo.sasakishingo.sasaki

transformResponse のコールバックに HTTPステータスを追加

https://github.com/axios/axios/pull/4580

transformResponse は、レスポンス内容を書き換えるフックを追加する手段。
ここに第三引数としてステータスコードが追加された。

axios.get("https://dummyjson.com/products/1", {
  transformResponse(data, headers, status) {
    console.log(status); // 200
  },
});
shingo.sasakishingo.sasaki

application/x-www-form-urlencoded への自動シリアライゼーション

https://github.com/axios/axios/pull/4714

README から抜粋

const data = {
  x: 1,
  arr: [1, 2, 3],
  arr2: [1, [2], 3],
  users: [{name: 'Peter', surname: 'Griffin'}, {name: 'Thomas', surname: 'Anderson'}],
};

await axios.postForm('https://postman-echo.com/post', data,
  {headers: {'content-type': 'application/x-www-form-urlencoded'}}
);
  {
    x: '1',
    'arr[]': [ '1', '2', '3' ],
    'arr2[0]': '1',
    'arr2[1][0]': '2',
    'arr2[2]': '3',
    'arr3[]': [ '1', '2', '3' ],
    'users[0][name]': 'Peter',
    'users[0][surname]': 'griffin',
    'users[1][name]': 'Thomas',
    'users[1][surname]': 'Anderson'
  }
shingo.sasakishingo.sasaki

自動シリアライゼーションやシリアライゼーションのためのヘルパー関数まわりは便利ではあるけど、あとは細かい機能追加、改修レベルでそんなでかい変化じゃなかったな。

あんまり面白みもなかったので特に記事化もせずクローズ

shingo.sasakishingo.sasaki

検索流入で需要がある気配がするのでもう少し整理して記事化しようかな。

shingo.sasakishingo.sasaki

1.0.0 に至る背景についても需要あるかもしれないし調べておく。

https://github.com/axios/axios/issues/4209

  • モダン JavaScript のプラクティスに則ったライブラリにしていきたい
  • 現在挙がっているモダン機能のリクエストはすべてクローズして次期バージョンのロードマップとし、現バージョンでは安定化を優先する

要望としては ESM 対応や TypeScript 対応が多いように見える。
それに node-fetch 以外の HTTP ライブラリのアダプタ対応や自動リトライ機構なども。

このスクラップは2022/10/07にクローズされました