Fixed Parameter Offset

Fixed Issue with parameters being offset when nesting
This commit is contained in:
nicco 2017-08-22 12:00:59 +02:00
parent 0eb643f5da
commit 5037467aa5

View File

@ -62,12 +62,15 @@ function pathToReg(path, options) {
* Gets the position of each parameter type and returns a map with it * Gets the position of each parameter type and returns a map with it
* @param {*} path * @param {*} path
*/ */
function pathToParams(path) { function pathToParams(path, options) {
let params = new Map() const
offset = options.prefix.split('/').slice(1).length,
params = new Map()
let i = 0 let i = 0
for (const seg of path.split('/').slice(1)) { for (const seg of path.split('/').slice(1)) {
if (seg[0] === ':') if (seg[0] === ':')
params.set(seg.slice(1), i) params.set(seg.slice(1), i + offset)
++i ++i
} }
return params return params
@ -83,7 +86,7 @@ function mkRouter(options, builder) {
let routes = new Map() let routes = new Map()
let routesKeys = new Map() let routesKeys = new Map()
// This object will process the builder function // This object (routesMaker) will process the builder function
let routesMaker = { let routesMaker = {
nest: function () { nest: function () {
// Join the lower paths with the current ones // Join the lower paths with the current ones
@ -98,7 +101,7 @@ function mkRouter(options, builder) {
key = pathToReg(arguments[0], options), key = pathToReg(arguments[0], options),
data = { data = {
fn: arguments[1], fn: arguments[1],
params: pathToParams(arguments[0]) params: pathToParams(arguments[0], options)
} }
// If the same regex already exits, grab the object // If the same regex already exits, grab the object
@ -157,7 +160,6 @@ function chooseFn(routes, path, method) {
for (const key of fn.params.keys()) for (const key of fn.params.keys())
paramObj[key] = pathArr[fn.params.get(key)] paramObj[key] = pathArr[fn.params.get(key)]
return [fn.fn, paramObj] return [fn.fn, paramObj]
} }
@ -188,6 +190,9 @@ module.exports = function (options, builder) {
const fn = chooseFn(routes, c.request.url, c.request.method) const fn = chooseFn(routes, c.request.url, c.request.method)
c.request.params = fn[1] c.request.params = fn[1]
fn[0](c, n) if (typeof fn[0] === 'function')
fn[0](c, n)
else
defaultResponse[0]()
} }
} }