node.js requestモジュールの代替 axiosの使い方

node.js requestからaxiosへ移行 nodejs

悲しいかな、ググるとrequestのサンプルが非常に多いので助かっていたのですが、deprecatedだったので、代替モジュールを使わなければなりません。requestの代替ライブラリのスレッドでいくつか挙げられていますが、コメント見てると多かったaxiosが良さげかもしれません。

request/request
🏊🏾 Simplified HTTP request client. Contribute to request/request development by creating an account on GitHub.

Alternative Libraries to request #3143

Alternative libraries to request · Issue #3143 · request/request
Since the announcement of request going into "maintenance mode" (full details in #3142) I'd like to collect a list of alternative libraries to use...

コメント見ているとaxiosが多いので、これを使ってみます。

axios
Promise based HTTP client for the browser and node.js
スポンサーリンク

1.Axiosを使ってみる

早速インストールして使ってみます。

npm install axios

1.1 requestで書いてたコードをaxiosで書いてみる

1.1.1 requestで動いていたコード

reuqestで書いていたコードは下記です。サーバ側でauth認証して、渡したデータを加工し結果をjsonで返すような事しています。gzip圧縮もaccept-encoding=gzip指定したらgzipで返ってきます。

let headers = {
 'Content-Type':'application/json',
 'Accept-Encoding': 'gzip',
 'Accept-Charset': 'utf-8',
 'Content-Encoding:'gzip'
};
let options = {
 url: g_url_base + g_url_page,
 method: 'post',
 headers: headers,
 auth: {
  user: "username",
  password:"password"
 },
 json: true,
 form: data
};

request(options, function(err,res,body){
 if(res.headers['content-encoding']=='gzip'){

 }else{
  let json = JSON.parse(body);
  ...
 }
});

1.1.2 axiosで動いたコード

axiosだと以下で似た感じで動くのだけど、accept-encoding gzipが効いていない。誰か詳しい人・・・
あとはoptionのパラメータが多少違うことくらい。

let headers = {
 'Content-Type':'application/json',
 'Accept-Encoding': 'gzip',
 'Accept-Charset':'utf-8',
 'Content-Encoding': 'gzip'
}
let options = {
 baseURL: g_url_base,
 url: g_url_page,
 method: 'post',
 headers: headers,
 auth: {
  username:"username",
  password:"password"
 },
 json: true,
 data:data
}

axios.request(options).then(function(res){
 if(res.headers['content-encoding']=='gzip'){

 }else{
  let json = res.data;
 }
}

gzipがうまくいってないです・・・requestモジュール時はContent-Encoding, Accept-Encodingともにgzipでイケてたのに。まぁ、ここは検討事案ということにして、とりあえず自分の用途での置き換えはすんなりいけました。

結果をgzip圧縮してファイルに保存でjsonデータがテキストと比べ1/3~1/4になるのでいいですね。

zlib.gzip(res.data, function(err,result){
  if(!err){
    fs.writeFileSync(filename, result);
  }
});

2. axios メソッドエイリアス

今回は axios(config)を使いました。が、configの一部を省略できる関数が用意されているので、そちらを使ってもいいかもしれません。

axios
Promise based HTTP client for the browser and node.js

3. リクエスト時のconfig

オプションは下記に記載されています。

axios
Promise based HTTP client for the browser and node.js

4. 言葉の使い方、モジュール、ライブラリ、パッケージ?

日本語だとモジュールが一番使われていますね。
海外だとどうなんでしょうね。

どれが一般用語なのかわからないのですが、とりあえずタイトル部分にはモジュール、文章にはライブラリを使うようにしようと思います。

コメント

タイトルとURLをコピーしました