url 모듈
http://nodejs.org/api/url.html
url 모듈은 url 정보를 객체로 가져와 분석하거나(parse) url 객체를 문자열로 바꿔주는 기능(format, resolve)을 수행합니다.
url.parse(urlStr, [parseQueryString], [slashesDenoteHost])
url 문자열(urlStr)을 url 객체로 변환하여 리턴합니다. parseQueryString과 slashesDenoteHost는 기본값으로 false입니다.
parseQueryString
- true : url 객체의 query 속성을 객체 형식으로 가져옵니다.(querystring 모듈을 사용합니다.)
- false : url 객체의 query 속성을 문자열 형식으로 가져옵니다.
slashesDenoteHost
- true : urlStr이 '//foo/bar' 인 경우 foo는 host, /bar는 path로 인식합니다.
- false : urlStr이 '//foo/bar' 인 경우 //foo/bar 전체를 path로 인식하고 host는 null 입니다.
예제
// urlExmaple.js var url = require('url'); var parsedObject = url.parse('http://user:pass@host.com:8080/p/a/t/h?query=string#hash'); console.log(parsedObject); // url 객체 정보 출력 console.log(url.format(parsedObject)); // url 객체를 문자열로 출력
실행 결과
$ node urlExample.js { protocol: 'http:', slashes: true, auth: 'user:pass', host: 'host.com:8080', port: '8080', hostname: 'host.com', hash: '#hash', search: '?query=string', query: 'query=string', pathname: '/p/a/t/h', path: '/p/a/t/h?query=string', href: 'http://user:pass@host.com:8080/p/a/t/h?query=string#hash' } http://user:pass@host.com:8080/p/a/t/h?query=string#hash
url.format은 따로 언급하진 않았지만 실행 결과에서 보듯이 문자열로 출력해 줍니다.
querystring 모듈
http://nodejs.org/api/querystring.html
querystring 모듈은 url 객체의 query와 관련된 모듈입니다. 분명 유용한 모듈이긴 하지만 url 모듈의 두 번째 인자 값을 조정함으로써 해결할 수도 있습니다.
매개 변수 [sep], [eq]
매개 변수를 먼저 살펴 보겠습니다. sep는 separator로 기본값은 '&' 입니다. 쿼리가 여러 개가 있을 때 쿼리와 쿼리 간의 구분자 역할을 합니다. eq는 assignment 역할을 하는 기호로 기본값은 '=' 입니다.
일반적인 쿼리 문자열은 다음과 같습니다. (아래는 네이버에 querystring을 검색했을 때 쿼리로 붙은 결과값입니다.)
where=nexearch&query=querystring&sm=top_hty&fbm=1&ie=utf8
parse(str, [sep], [eq], [options]), stringify(obj, [sep], [eq])
querystring.parse() 는 쿼리 문자열을 쿼리 객체로 바꿔주는 역할을, querystring.stringify() 는 쿼리 객체를 쿼리 문자열로 바꿔주는 역할을 합니다. 둘 다 sep과 eq 옵션을 통해 구분자와 대입자를 임의로 정할 수 있습니다.
querystring.parse() 의 options는 객체 형식이며 maxKeys 속성을 통해 최대 개수를 제한할 수 있습니다. 기본값은 1000이며 0으로 설정할 경우 그 제한을 없앨 수 있습니다.(하지만 잘 사용하지는 않습니다.)
예제
// querystringExample.js var querystring = require('querystring'); var qStr = 'where=nexearch&query=querystring&sm=top_hty&fbm=1&ie=utf8'; var qObj = querystring.parse(qStr); // 일반적인 사용 var qObj2 = querystring.parse(qStr, '&', '=', { maxKeys: 3 }); // 구분 문자열이 다를 경우 &와 = 자리에 해당 문자를 넣어 사용합니다. // maxKeys로 3을 넘겨주면 값을 3개만 가져옵니다. console.log(qObj); // 쿼리의 값들을 모두 가져옴 console.log(querystring.stringify(qObj)); console.log(querystring.stringify(qObj, '; ', '->')); console.log(qObj2); // 쿼리의 값을 3개만 가져옴 console.log(querystring.stringify(qObj2)); console.log(querystring.stringify(qObj2, '; ', '->'));
실행 결과
$ node querystringExample.js { where: 'nexearch', query: 'querystring', sm: 'top_hty', fbm: '1', ie: 'utf8' } where=nexearch&query=querystring&sm=top_hty&fbm=1&ie=utf8 where->nexearch; query->querystring; sm->top_hty; fbm->1; ie->utf8 { where: 'nexearch', query: 'querystring', sm: 'top_hty' } where=nexearch&query=querystring&sm=top_hty where->nexearch; query->querystring; sm->top_hty