fetch vs. axios (feat. request, node:http)
node 에서 다른 서버와 http 통신하는 방법이 여러가지인데, 현재 node-fetch 와 axios 가 쌍벽입니다.

node-fetch는 브라우저 환경에서 지원되는 fetch api가 유용해서 node 로 가져온 것이라고 하는데, 이제 download 빈도는 axios 를 추월했습니다. 하지만 dependent 라이브러리의 수는 axios 가 15만개로, 4만개 정도인 node-fetch를 압도합니다. 코드의 간결함은 axios 가 더 나은 것 같습니다. 외부 라이브러리를 덜 쓰게 된다는 점에서 fetch 가 좋다고 생각하고요.
여러분은 어떤 http 라이브러리를 주로 쓰시나요?
(참고로 같이 비교한 node:http 코드는 너저분하네요. request 도 비교했습니다. 과거에는 request 가 axios 와 쌍벽이었다고 하는데, 개발자가 손들고 deprecated 라고 하는 바람에 이젠 주간 다운로드 수도 1100만 정도로 줄었습니다.)
import http from 'node:http'
import fetch from 'node-fetch'
import axios from 'axios'
import request from 'request'
const POST_URL = 'http://jsonplaceholder.typicode.com/posts/1'
async function use_fetch() {
const response = await fetch(POST_URL)
if (!response.ok) {
console.error('Error: failed to fetch!');
} else {
const data = await response.json()
console.log('\n\n-- use_fetch: ')
console.log(data)
}
}
async function use_axios() {
try {
const response = await axios.get(POST_URL)
console.log('\n\n-- use_axios: ')
console.log(response.data)
} catch (error) {
console.error('Error:', error.message);
}
}
function use_node_http() {
http.get(
POST_URL,
res => {
let data = '';
// Collect data chunks
res.on('data', (chunk) => {
data += chunk;
});
// Process the complete response
res.on('end', () => {
console.log('\n\n-- use_node_http: ')
console.log(JSON.parse(data));
});
}).on('error', (err) => {
console.error('Error:', err.message);
});
}
function use_request() {
request( POST_URL, (error, response) => {
const data = JSON.parse(response.body)
console.log('\n\n-- use_request: ')
console.log(data)
})
}
use_fetch()
use_axios()
use_node_http()
use_request()