Skip to content

Commit

Permalink
Fix path params match issue (#159) (#160)
Browse files Browse the repository at this point in the history
  • Loading branch information
nooop3 committed Aug 24, 2020
1 parent 4e9d226 commit 1bcedc7
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ Router.prototype.find = function find (method, path, version) {
return this._getWildcardNode(wildcardNode, method, originalPath, pathLenWildcard)
}

var goBack = this.ignoreTrailingSlash ? previousPath : '/' + previousPath
var goBack = previousPath.charCodeAt(0) === 47 ? previousPath : '/' + previousPath
if (originalPath.indexOf(goBack) === -1) {
// we need to know the outstanding path so far from the originalPath since the last encountered "/" and assign it to previousPath.
// e.g originalPath: /aa/bbb/cc, path: bb/cc
Expand Down
37 changes: 37 additions & 0 deletions test/path-params-match.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use strict'

const t = require('tap')
const FindMyWay = require('../')

t.test('path params match', (t) => {
t.plan(12)

const findMyWay = FindMyWay({ ignoreTrailingSlash: true })

const b1Path = function b1StaticPath () {}
const b2Path = function b2StaticPath () {}
const cPath = function cStaticPath () {}
const paramPath = function parameterPath () {}

findMyWay.on('GET', '/ab1', b1Path)
findMyWay.on('GET', '/ab2', b2Path)
findMyWay.on('GET', '/ac', cPath)
findMyWay.on('GET', '/:pam', paramPath)

t.equals(findMyWay.find('GET', '/ab1').handler, b1Path)
t.equals(findMyWay.find('GET', '/ab1/').handler, b1Path)
t.equals(findMyWay.find('GET', '/ab2').handler, b2Path)
t.equals(findMyWay.find('GET', '/ab2/').handler, b2Path)
t.equals(findMyWay.find('GET', '/ac').handler, cPath)
t.equals(findMyWay.find('GET', '/ac/').handler, cPath)
t.equals(findMyWay.find('GET', '/foo').handler, paramPath)
t.equals(findMyWay.find('GET', '/foo/').handler, paramPath)

const noTrailingSlashRet = findMyWay.find('GET', '/abcdef')
t.equals(noTrailingSlashRet.handler, paramPath)
t.deepEqual(noTrailingSlashRet.params, { pam: 'abcdef' })

const trailingSlashRet = findMyWay.find('GET', '/abcdef/')
t.equals(trailingSlashRet.handler, paramPath)
t.deepEqual(trailingSlashRet.params, { pam: 'abcdef' })
})

0 comments on commit 1bcedc7

Please sign in to comment.