Skip to content

Commit d522deb

Browse files
committed
add custom baseURL support, now can custom define "/users/:uid/post/:id" url
1 parent 90d5242 commit d522deb

File tree

6 files changed

+65
-26
lines changed

6 files changed

+65
-26
lines changed

README.md

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,22 @@ var server = connect(
4949
connect.query(),
5050
connect.bodyParser(),
5151
urlrouter(function (app) {
52-
5352
app.get('/', function (req, res) {
5453
res.end('hello world');
5554
});
5655

57-
restful(app, 'users', user);
58-
restful(app, 'foos', foo);
56+
restful({
57+
app: app,
58+
name: 'users',
59+
controller: user
60+
});
61+
62+
restful({
63+
app: app,
64+
baseURL: '/users/:uid/',
65+
name: 'foos',
66+
controller: foo
67+
});
5968

6069
})
6170
).listen(3000);

example/app.js

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,28 @@ var user = require('./controllers/user');
1717
var foo = require('./controllers/foo');
1818

1919
var server = connect(
20-
21-
connect.query(),
22-
connect.bodyParser(),
23-
urlrouter(function (app) {
24-
25-
app.get('/', function (req, res) {
26-
res.end('hello world');
27-
});
28-
29-
restful(app, 'users', user);
30-
restful(app, 'foos', foo);
31-
32-
}));
20+
connect.query(),
21+
connect.bodyParser(),
22+
urlrouter(function (app) {
23+
app.get('/', function (req, res) {
24+
res.end('hello world');
25+
});
26+
27+
restful({
28+
app: app,
29+
name: 'users',
30+
controller: user
31+
});
32+
33+
restful({
34+
app: app,
35+
baseURL: '/users/:uid',
36+
name: 'foos',
37+
controller: foo
38+
});
39+
40+
})
41+
);
3342

3443
if (process.env.NODE_ENV !== 'test') {
3544
server.listen(3000);

example/controllers/foo.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
exports.list = function (req, res, next) {
2-
next(new Error('mock foo.list error'));
2+
next(new Error('mock foo.list error, uid: ' + req.params.uid));
33
};

lib/restful-router.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* Module dependencies.
1111
*/
1212

13+
var debug = require('debug')('restful-router');
14+
1315
/**
1416
* Auto generate RESTful url routes.
1517
*
@@ -23,12 +25,22 @@
2325
* PUT /users/:id => user.update()
2426
* DELETE /users/:id => user.destroy()
2527
*
26-
* @param {Object} app, must impl `app.get(), app.post(), app.put(), app.delete()`.
27-
* @param {String} name, resource's name. like `users, posts, tweets`.
28-
* @param {Object} mod, module contains `CRUD List` methods.
28+
* @param {Object} options
29+
* - {Object} app, must impl `app.get(), app.post(), app.put(), app.delete()`.
30+
* - {String} name, resource's name. like `users, posts, tweets`.
31+
* - {Object} controller, controller module contains `CRUD List` methods.
32+
* - {String} [baseURL], default is '/'. e.g.: '/posts/:pid/'
2933
*/
30-
module.exports = function restfulRouter(app, name, mod) {
31-
var url = '/' + name;
34+
module.exports = function restfulRouter(options) {
35+
var app = options.app;
36+
var controller = options.controller;
37+
var name = options.name || controller.name;
38+
var baseURL = options.baseURL || '/';
39+
if (baseURL[baseURL.length - 1] !== '/') {
40+
baseURL += '/';
41+
}
42+
var url = baseURL + name;
43+
debug('%s => %s', name, url);
3244
var routes = [
3345
[ 'get', url, 'list' ],
3446
[ 'get', url + '/new', 'new' ],
@@ -42,9 +54,10 @@ module.exports = function restfulRouter(app, name, mod) {
4254

4355
for (var i = 0; i < routes.length; i++) {
4456
var route = routes[i];
45-
var handle = mod[route[2]];
57+
var handle = controller[route[2]];
4658
if (typeof handle === 'function') {
4759
app[route[0]](route[1], handle);
60+
debug('%s %s', route[0], route[1]);
4861
}
4962
}
5063
};

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"test": "make test"
88
},
99
"dependencies": {
10+
"debug": "0.x"
1011
},
1112
"devDependencies": {
1213
"should": "*",

test/restful-router.test.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,22 @@ describe('restful-router.test.js', function () {
8787
.expect(404, done);
8888
});
8989

90-
it('should get /foos => 500', function (done) {
90+
it('should get /foos => 404', function (done) {
9191
request(app)
9292
.get('/foos')
93+
.expect(404, done);
94+
});
95+
96+
it('should get /users/mk2/foos => 500', function (done) {
97+
request(app)
98+
.get('/users/mk2/foos')
99+
.expect(/Error: mock foo.list error, uid: mk2/)
93100
.expect(500, done);
94101
});
95102

96-
it('should post /foos => 404', function (done) {
103+
it('should post /users/123/foos => 404', function (done) {
97104
request(app)
98-
.post('/foos')
105+
.post('/users/123/foos')
99106
.expect(404, done);
100107
});
101108

0 commit comments

Comments
 (0)