1 | var middleware = require('./middleware')
|
2 | var extend = require('../extend')
|
3 | var querystringLite = require('../querystring-lite')
|
4 |
|
5 | function expandUrl (pattern, _params, qs) {
|
6 | var params = _params || {}
|
7 | var onlyQueryParams = extend({}, params)
|
8 |
|
9 | var url = pattern.replace(/:([a-z_][a-z0-9_]*)\*/gi, function (_, id) {
|
10 | var param = params[id]
|
11 | delete onlyQueryParams[id]
|
12 | return encodeURI(paramToString(param))
|
13 | })
|
14 |
|
15 | url = url.replace(/:([a-z_][a-z0-9_]*)/gi, function (_, id) {
|
16 | var param = params[id]
|
17 | delete onlyQueryParams[id]
|
18 | return encodeURIComponent(paramToString(param))
|
19 | })
|
20 |
|
21 | var query = qs.stringify(onlyQueryParams)
|
22 |
|
23 | if (query) {
|
24 | return url + '?' + query
|
25 | } else {
|
26 | return url
|
27 | }
|
28 | }
|
29 |
|
30 | function paramToString (p) {
|
31 | if (p === undefined || p === null) {
|
32 | return ''
|
33 | } else {
|
34 | return p
|
35 | }
|
36 | }
|
37 |
|
38 | module.exports = middleware('querystring', function (request, next) {
|
39 | if (request.options.params instanceof Object) {
|
40 | var render = request.options.expandUrl || expandUrl
|
41 | request.url = render(request.url, request.options.params, request.options.qs || querystringLite)
|
42 | }
|
43 |
|
44 | return next()
|
45 | })
|