diff --git a/README.md b/README.md index 52e10c4..605ba2c 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ Key | Type | Description `headers` | `object` | Object containing request headers `method` | `string` | HTTP request method `params` | `object` | Object containing all parameters defined in the url string +`query` | `object` | Object containing all query parameters ### `res`-Object diff --git a/index.d.ts b/index.d.ts index d4d56da..ab7cf4e 100644 --- a/index.d.ts +++ b/index.d.ts @@ -35,6 +35,7 @@ declare class Router { * @typedef RouterRequest * @property {string} method HTTP request method * @property {Object} params Object containing all parameters defined in the url string + * @property {Object} query Object containing all query parameters * @property {Object} headers Object containing request headers * @property {Object|string} body Only available if method is `POST`, `PUT` or `PATCH`. Contains either the received body string or a parsed object if valid JSON was sent. */ diff --git a/index.js b/index.js index fa9a321..a9e6443 100644 --- a/index.js +++ b/index.js @@ -40,6 +40,7 @@ class Router { * @typedef RouterRequest * @property {string} method HTTP request method * @property {Object} params Object containing all parameters defined in the url string + * @property {Object} query Object containing all query parameters * @property {Object} headers Object containing request headers * @property {Object|string} body Only available if method is `POST`, `PUT` or `PATCH`. Contains either the received body string or a parsed object if valid JSON was sent. */ @@ -247,19 +248,25 @@ class Router { * @returns {Route|undefined} */ getRoute(request) { - const urlArr = (new URL(request.url)).pathname.split('/').filter(i => i) + const url = new URL(request.url) + const pathArr = url.pathname.split('/').filter(i => i) return this.routes.find(r => { const routeArr = r.url.split('/').filter(i => i) - if (![request.method, '*'].includes(r.method) || routeArr.length !== urlArr.length) + if (![request.method, '*'].includes(r.method) || routeArr.length !== pathArr.length) return false const params = {} for (let i = 0; i < routeArr.length; i++) { - if (routeArr[i] !== urlArr[i] && routeArr[i][0] !== ':') + if (routeArr[i] !== pathArr[i] && routeArr[i][0] !== ':') return false if (routeArr[i][0] === ':') - params[routeArr[i].substring(1)] = urlArr[i] + params[routeArr[i].substring(1)] = pathArr[i] } request.params = params + const query = {} + for (const [k, v] of url.searchParams.entries()) { + query[k] = v + } + request.query = query return true }) } diff --git a/package.json b/package.json index 447b508..99d4219 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tsndr/cloudflare-worker-router", - "version": "1.0.4", + "version": "1.1.0", "description": "", "main": "index.js", "scripts": {},