node package manager



URI parsing and manipulation for node.js and the browser.

Build Status


spm package

Pass any URL into the constructor:

var uri = new Uri('')

Use property methods to get at the various parts:

uri.protocol()    // http 
uri.userInfo()    // user:pass        // 
uri.port()        // 81 
uri.path()        // /index.html 
uri.query()       // q=books 
uri.anchor()      // fragment 

Property methods accept an optional value to set:

uri.toString()    //'')
uri.toString()    // 

Chainable setter methods help you compose strings:

new Uri()
    .setQuery('?page=1')                   // /archives/1979?page=1 
new Uri()
    .setQuery('this=that&some=thing')      // 
new Uri('')
    .setProtocol('https')                  // 

Query param methods

Returns the first query param value for the key:

new Uri('?cat=1&cat=2&cat=3').getQueryParamValue('cat')             // 1 

Returns all query param values for the given key:

new Uri('?cat=1&cat=2&cat=3').getQueryParamValues('cat')            // [1, 2, 3] 

Internally, query key/value pairs are stored as a series of two-value arrays in the Query object:

new Uri('?a=b&c=d').query().params                  // [ ['a', 'b'], ['c', 'd']] 

Add query param values:

new Uri().addQueryParam('q', 'books')               // ?q=books 
new Uri('')
    .addQueryParam('testing', '123')
    .addQueryParam('one', 1)                        // 
// insert param at index 0 
new Uri('?b=2&c=3&d=4').addQueryParam('a', '1', 0)  // ?a=1&b=2&c=3&d=4 

Replace every query string parameter named key with newVal:

new Uri().replaceQueryParam('page', 2)     // ?page=2 
new Uri('?a=1&b=2&c=3')
    .replaceQueryParam('a', 'eh')          // ?a=eh&b=2&c=3 
new Uri('?a=1&b=2&c=3&c=4&c=5&c=6')
    .replaceQueryParam('c', 'five', '5')   // ?a=1&b=2&c=3&c=4&c=five&c=6 

Removes instances of query parameters named key:

new Uri('?a=1&b=2&c=3')
    .deleteQueryParam('a')                 // ?b=2&c=3 
new Uri('')
    .deleteQueryParam('a', 'eh')           // 

Test for the existence of query parameters named key:

new Uri('?a=1&b=2&c=3')
    .hasQueryParam('a')                    // true 
new Uri('?a=1&b=2&c=3')
    .hasQueryParam('d')                    // false 

Create an identical URI object with no shared state:

var baseUri = new Uri('http://localhost/')
baseUri.clone().setProtocol('https')   // https://localhost/ 
baseUri                                // http://localhost/ 

This project incorporates the parseUri regular expression by Steven Levithan.