-
노드 url, dns, searchParams노드 2023. 4. 11. 18:14
url
인터넷 주소를 쉽게 조작하도록 도와주는 모듈이다.
url처리에는 크게 두 가지 방식이 있다
- WHATWG(웹 표준을 정하는 단체의 이름) 방식의 url
- 예전부터 노드에서 사용하던 방식의 url
요즘은 1번 방식만 사용한다. 그리고 브라우저에서도 WHATWG 방식을 사용한다.
WHATWG와 노드의 주소 체계는 다음과 같다
//url.js const url = require('url'); const {URL} = url; const myURL = new URL ('http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor'); console.log('new URL():', myURL); console.log('url.format():', url.format(myURL));
이 방식이 WHATWG의 url이다.
- username
- password
- origin
- searchParams
등의 속성이 존재한다.
searchParams
만약에
http://www.gilbut.co.kr/?page=3&limit=10&category=nodejs&category=javascript
이런 url이 있다고 하면 search 부분(쿼리스트링)은 다음과 같다.
?page=3&limit=10&category=nodejs&category=javascript
search부분은 보통 주소를 통해 데이터를 전달할 때 사용된다.
search는 물음표로 시작하고 그 뒤에 키=값 형식으로 데이터를 전달한다. 또한 여러 키가 있을 경우 &로 구분한다.
search 부분을 다루기 위해 searchParams라는 특수한 객체가 생성된다.
search 부분이 객체화 되었기 때문에 다양한 핸들링이 가능해진다.
//searchParams.js const myURL = new URL('http://www.gilbut.co.kr/?page=3&limit=10&category=nodejs&category=javascript'); console.log('searchParams:', myURL.searchParams); console.log('searchParams.getAll():', myURL.searchParams.getAll('category')); console.log('searchParams.get():', myURL.searchParams.get('limit')); console.log('searchParams.has():', myURL.searchParams.has('page')); console.log('searchParams.keys():', myURL.searchParams.keys()); console.log('searchParams.values():', myURL.searchParams.values()); myURL.searchParams.append('filter', 'es3'); myURL.searchParams.append('filter', 'es5'); console.log(myURL.searchParams.getAll('filter')); myURL.searchParams.set('filter', 'es6'); console.log(myURL.searchParams.getAll('filter')); myURL.searchParams.delete('filter'); console.log(myURL.searchParams.getAll('filter')); console.log('searchParams.toString():', myURL.searchParams.toString()); myURL.search = myURL.searchParams.toString();
- getAll(키) : 키에 해당하는 모든 값을 가져온다. category 키에는 nodejs와 javascript라는 두 가지 값이 들어 있다.
- get(키) : 키에 해당하는 첫 번째 값만 가져온다.
- has(키) : 해당 키가 있는지 없는지를 검사한다.
- keys() : searchParams의 모든 키를 반복기(iterator) 객체로 가져온다.
- values() : searchParams의 모든 값을 반복기 객체로 가져온다.
- append(키, 값) : 해당 키를 추가한다. 같은 키의 값이 있다면 유지하고 하나 더 추가한다.
- set(키, 값) : append와 비슷하지만 같은 키의 값들을 모두 지우고 새로 추가한다.
- delete(키) : 해당 키를 제거한다.
- toString() : 조작한 searchParams 객체를 다시 문자열로 만든다. 이 문자열을 search에 대입하면 주소 객체에 반영된다.
dns
DNS를 다룰 때 사용하는 모듈이다. 주로 도메인을 통해 IP나 기타 NDS 정보를 얻고자 할 때 사용한다.
//dns.mjs import dns from 'dns/promises'; const ip = await dns.lookup('gilbut.co.kr'); console.log('IP', ip); const a = await dns.resolve('gilbut.co.kr', 'A'); console.log('A', a); const mx = await dns.resolve('gilbut.co.kr', 'MX'); console.log('MX', mx); const Cname = await dns.resolve('www.gilbut.co.kr', 'CNAME'); console.log('CNAME', cname); const any = await dns.resolve('gilbut.co.kr', 'ANY'); console.log('ANY', any);
ip 주소는 간단하게 dns.lookup 이나 dns.resolve(도메인) 으로 얻을 수 있다. A(ipv4주소), AAAA(ipv6 주소), NS(네임서버), SOA(도메인 정보), CNAME(별칭, 주로 www가 붙은 주소는 별칭인 경우가 많다), MX(메일 서버)등은 레코드라고 부르는데, 해당 레코드에 대한 정보는 dns.resolve(도메인, 레코드 이름) 으로 조회하면 된다.
'노드' 카테고리의 다른 글
노드 worker_threads (0) 2023.04.12 노드 crypto 와 util (0) 2023.04.12 노드 os와 path (0) 2023.04.11 노드 process (0) 2023.04.11 노드 내장 객체 global, console, 타이머 (0) 2023.04.11