node-fetch / URLSearchParams

길고 꾸준하게·2022년 5월 29일
0
post-thumbnail

node-fetch

말그대로 nodejs환경에서 쓰는 fetch API

사실 블로깅할 내용은 별로없지만. 왜 nodejs에서는 내장기능인 fetch API를 안쓰고 node-fetch를 쓰지? 라는 생각을 했는데. 당연한거다 안쓰는게아니라 못쓰는거다

런타임 환경이 다르니까!! -> fetch API는 WebAPI중 하나다

JavaScript는 기본적으로 웹 브라우저 환경을 가진 애인데 nodejs는 javascript에 새로운 런타임환경이라고 배웠다

즉 브라우저의 환경이 아니라서 WebAPI를 못쓰는거고, 이를 사용해주기 위해 node-fetch나 axios등을 설치해서 사용하는거다.. 역시 사람은 배운걸 응용해먹을줄 알아야한다

그래서 node-fetch를 이용해서 request를 날리는데 query문이 길어져서 상당히 귀찮은 상태에 와있었다. 이때 나는 URLSearchParams라는걸 배운다.

import fetch from 'node-fetch' // ESModule

async function fetchData(){
	const data = await fetch(url,{
		method:"",
	    headers:{		//사용법은 동일
	    }
	})
    const json = await data.json();
    
    return json
}

fetch가 프로미스를 리턴하는건 알고있다. fetch의 response.body에 요청의 결과가 담겨오고. readableStream형태로 담겨온다. 이를 JSON포맷으로 변경해줘야 javascript에서 참조하기 순조롭다

.json()메서드를 써서 JSON으로 입력값을 사용하고, 그걸 이용해 js객체로 파싱해준다 json메서드 역시 프로미스를 리턴하기때문에 (json으로 바꾸고 그걸 obj로 파싱하는데까지 시간이 걸리니까 비동기처리여서 프로미스를 리턴하나보다)

await을 써서 동기적으로 작성한다

URLSearchParams

URL의 쿼리 문자열에 대해 작업할 수 있는 유틸리티 메서드를 정의한다.
new 생성자를 이용해 URLSearchParams를 만들어 줄 수 있다

생성방법

const url = new URL('url')

// 1. 문자열 리터럴
const params = new URLSearchParams("foo=1&bar=2")

// 2. 배열 쌍
const params = new URLSearchParams(["foo","1"],["bar","2"])

// 3. record (oboject)
const params = new URLSearchParams({
	foo:1,
    bar:2
})

URL.search

URL.search는 쿼리문의 맨앞 '?"와 함께 url의 쿼리문자열을 나타내는 string이고
searchParamas 메서드를 통해 간편한 쿼리문자열 분석을 지원한다

const URL = new URL("https://host?foo=123");

console.log(URL.search) // "?foo=123"
profile
작은 나의 개발 일기장

0개의 댓글