69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # @polka/url [](https://npmjs.org/package/@polka/url) [](https://licenses.dev/npm/%40polka%2Furl)
 | |
| 
 | |
| > Super fast, memoized `req.url` parser; _not_ limited to [Polka][polka]!
 | |
| 
 | |
| Parses the `url` from a [`IncomingMessage`](https://nodejs.org/api/http.html#http_class_http_incomingmessage) request. The returned object will always only contain the following keys: `search`, `query`, `pathname`, and `raw`.
 | |
| 
 | |
| > **Note:** This library does not process `protocol`, `hostname`, `port`, etc.<br>This is because the incoming `req.url` value only begins with the path information.
 | |
| 
 | |
| Parsed requests will be mutated with a `_parsedUrl` key, containing the returned output. This is used for future memoization, avoiding the need to fully parse the same `url` value multiple times.
 | |
| 
 | |
| ## Install
 | |
| 
 | |
| ```
 | |
| $ npm install --save @polka/url
 | |
| ```
 | |
| 
 | |
| ## Usage
 | |
| 
 | |
| ```js
 | |
| const parse = require('@polka/url');
 | |
| 
 | |
| let req = {
 | |
|   url: '/foo/bar?fizz=buzz'
 | |
| };
 | |
| let output = parse(req);
 | |
| //=> {
 | |
| //=>   pathname: '/foo/bar',
 | |
| //=>   raw: '/foo/bar?fizz=buzz',
 | |
| //=>   search: '?fizz=buzz',
 | |
| //=>   query: {
 | |
| //=>     fizz: 'buzz'
 | |
| //=>   },
 | |
| //=> }
 | |
| 
 | |
| // Attaches result for future memoization
 | |
| assert.deepEqual(output, req._parsedUrl); //=> true
 | |
| ```
 | |
| 
 | |
| ## API
 | |
| 
 | |
| ### url(req)
 | |
| Returns: `Object` or `undefined`
 | |
| 
 | |
| > **Important:** The `req` must have a `url` key, otherwise `undefined` will be returned.<br>If no input is provided at all, a `TypeError` will be thrown.
 | |
| 
 | |
| #### req
 | |
| Type: `IncomingMessage` or `{ url: string }`
 | |
| 
 | |
| The incoming HTTP request (`req`) or a plain `Object` with a `url` key.
 | |
| 
 | |
| > **Note:** In Node.js servers, the [`req.url`](https://nodejs.org/api/http.html#http_message_url) begins with a pathname & does not include a `hash`.
 | |
| 
 | |
| 
 | |
| ## Benchmarks
 | |
| 
 | |
| Check out the [`bench`](/bench) directory for in-depth benchmark results and comparisons.
 | |
| 
 | |
| 
 | |
| ## Support
 | |
| 
 | |
| Any issues or questions can be sent to the [Polka][polka] repository.<br>However, please specify that your inquiry is about `@polka/url` specifically.
 | |
| 
 | |
| 
 | |
| ## License
 | |
| 
 | |
| MIT © [Luke Edwards](https://lukeed.com)
 | |
| 
 | |
| [polka]: https://github.com/lukeed/polka
 |