Simplify rewriter

This commit is contained in:
Typicode
2015-06-16 02:16:15 +02:00
parent cd710213e0
commit 34f6fd3412
2 changed files with 24 additions and 14 deletions

View File

@ -3,17 +3,27 @@ var express = require('express')
module.exports = function (routes) { module.exports = function (routes) {
var router = express.Router() var router = express.Router()
for (var route in routes) { Object.keys(routes).forEach(function (route) {
router.all(route, function (req, res, next) {
var target = routes[route] if (route.indexOf(':') !== -1) {
for (var param in req.params) { router.all(route, function (req, res, next) {
target = target.replace(':' + param, req.params[param]) // Rewrite target url using params
} var target = routes[route]
console.log(target) for (var param in req.params) {
req.url = target target = target.replace(':' + param, req.params[param])
next() }
}) req.url = target
} next()
})
} else {
router.all(route + '*', function (req, res, next) {
// Rewrite url by replacing prefix
req.url = req.url.replace(route, routes[route])
next()
})
}
})
return router return router
} }

View File

@ -40,7 +40,7 @@ describe('Server', function () {
router = jsonServer.router(db) router = jsonServer.router(db)
server.use(jsonServer.defaults) server.use(jsonServer.defaults)
server.use(jsonServer.rewriter({ server.use(jsonServer.rewriter({
'/api/:resource/:id': '/:resource/:id', '/api/': '/',
'/blog/posts/:id/show': '/posts/:id' '/blog/posts/:id/show': '/posts/:id'
})) }))
server.use(router) server.use(router)
@ -370,14 +370,14 @@ describe('Server', function () {
describe('Rewriter', function () { describe('Rewriter', function () {
it('should rewrite URL (1)', function (done) { it('should rewrite using prefix', function (done) {
request(server) request(server)
.get('/api/posts/1') .get('/api/posts/1')
.expect(db.posts[0]) .expect(db.posts[0])
.end(done) .end(done)
}) })
it('should rewrite URL (2)', function (done) { it('should rewrite using params', function (done) {
request(server) request(server)
.get('/blog/posts/1/show') .get('/blog/posts/1/show')
.expect(db.posts[0]) .expect(db.posts[0])