forked from typicode/json-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrewriter.js
More file actions
38 lines (34 loc) · 1.05 KB
/
rewriter.js
File metadata and controls
38 lines (34 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const express = require('express')
const url = require('url')
const _ = require('lodash')
function updateQueryString (target, sourceUrl) {
return ~sourceUrl.indexOf('?') ? _.assign(target, url.parse(sourceUrl, true).query) : {}
}
module.exports = (routes) => {
const router = express.Router()
router.get('/__rules', (req, res) => {
res.json(routes)
})
Object.keys(routes).forEach((route) => {
if (route.indexOf(':') !== -1) {
router.all(route, (req, res, next) => {
// Rewrite target url using params
let target = routes[route]
for (const param in req.params) {
target = target.replace(':' + param, req.params[param])
}
req.url = target
req.query = updateQueryString(req.query, req.url)
next()
})
} else {
router.all(route + '*', (req, res, next) => {
// Rewrite url by replacing prefix
req.url = req.url.replace(route, routes[route])
req.query = updateQueryString(req.query, req.url)
next()
})
}
})
return router
}