express-urlrewrite
Advanced tools
Comparing version 1.1.0 to 1.2.0
51
index.js
@@ -26,27 +26,38 @@ | ||
function rewrite(src, dst) { | ||
var keys = []; | ||
var re = toRegexp(src, keys); | ||
var map = toMap(keys); | ||
var keys = [], re, map; | ||
debug('rewrite %s -> %s %s', src, dst, re); | ||
if (dst) { | ||
re = toRegexp(src, keys); | ||
map = toMap(keys); | ||
debug('rewrite %s -> %s %s', src, dst, re); | ||
} else { | ||
debug('rewrite current route -> %s', src); | ||
} | ||
return function(req, res, next){ | ||
return function(req, res, next) { | ||
var orig = req.url; | ||
var m = re.exec(orig); | ||
if (m) { | ||
req.url = dst.replace(/\$(\d+)|(?::(\w+))/g, function(_, n, name){ | ||
if (name) return m[map[name].index + 1]; | ||
var m; | ||
if (dst) { | ||
m = re.exec(orig); | ||
if (!m) { | ||
return next(); | ||
} | ||
} | ||
req.url = (dst || src).replace(/\$(\d+)|(?::(\w+))/g, function(_, n, name) { | ||
if (name) { | ||
if (m) return m[map[name].index + 1]; | ||
else return req.params[name]; | ||
} else if (m) { | ||
return m[n]; | ||
}); | ||
debug('rewrite %s -> %s', orig, req.url); | ||
if (req.url.indexOf('?') > 0) { | ||
req.query = URL.parse(req.url, true).query; | ||
debug('rewrite updated new query', req.query); | ||
} else { | ||
return req.params[n]; | ||
} | ||
}); | ||
debug('rewrite %s -> %s', orig, req.url); | ||
if (req.url.indexOf('?') > 0) { | ||
req.query = URL.parse(req.url, true).query; | ||
debug('rewrite updated new query', req.query); | ||
} | ||
next(); | ||
if (dst) next(); | ||
else next('route'); | ||
} | ||
@@ -66,3 +77,3 @@ } | ||
params.forEach(function(param, i){ | ||
params.forEach(function(param, i) { | ||
param.index = i; | ||
@@ -69,0 +80,0 @@ map[param.name] = param; |
@@ -8,3 +8,3 @@ { | ||
}, | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"keywords": [ | ||
@@ -11,0 +11,0 @@ "express", |
@@ -51,4 +51,16 @@ express-urlrewrite | ||
## New in version 1.2 | ||
rewrite can be used as a route middleware as in | ||
```js | ||
app.get('/route/:var', rewrite('/rewritten/:var')); | ||
app.get('/rewritten/:var', someMw); | ||
``` | ||
Instead of passing control to next middleware, it passes control to next route. | ||
## Debugging | ||
Set environment variable `DEBUG=express-urlrewrite` |
3450
70
66