From e04389cd7c3b8dd3caee915d04dc38e30b393f3f Mon Sep 17 00:00:00 2001 From: Typicode Date: Thu, 26 Nov 2015 00:37:29 +0100 Subject: [PATCH] Add POST /:resource/:id/:nested route --- CHANGELOG.md | 7 +++++++ README.md | 5 +++-- src/server/router/nested.js | 16 +++++++++++++--- test/server/plural.js | 11 +++++++++++ 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ceaf0c5..e7c83b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## [0.8.3][2015-11-25] + +### Added + +* CLI option `-q/--quied` +* Nested route `POST /posts/1/comments` + ## [0.8.2][2015-10-15] ### Added diff --git a/README.md b/README.md index 44afdef..c9524fa 100644 --- a/README.md +++ b/README.md @@ -130,10 +130,11 @@ GET /comments?_expand=post GET /comments/1?_expand=post ``` -To get nested resources (by default one level, [add routes](#add-routes) for more) +To get or create nested resources (by default one level, [add routes](#add-routes) for more) ``` -GET /posts/1/comments +GET /posts/1/comments +POST /posts/1/comments ``` ### Database diff --git a/src/server/router/nested.js b/src/server/router/nested.js index b776058..b8413e9 100644 --- a/src/server/router/nested.js +++ b/src/server/router/nested.js @@ -6,13 +6,23 @@ module.exports = function () { var router = express.Router() - // Rewrite url to /:nested?:resourceId=:id - router.get('/:resource/:id/:nested', function (req, res, next) { + // Rewrite URL (/:resource/:id/:nested -> /:nested) and request query + function get (req, res, next) { var prop = pluralize.singular(req.params.resource) req.query[prop + 'Id'] = utils.toNative(req.params.id) req.url = '/' + req.params.nested next() - }) + } + + // Rewrite URL (/:resource/:id/:nested -> /:nested) and request body + function post (req, res, next) { + var prop = pluralize.singular(req.params.resource) + req.body[prop + 'Id'] = utils.toNative(req.params.id) + req.url = '/' + req.params.nested + next() + } return router + .get('/:resource/:id/:nested', get) + .post('/:resource/:id/:nested', post) } diff --git a/test/server/plural.js b/test/server/plural.js index 8ef78e3..a6f8d88 100644 --- a/test/server/plural.js +++ b/test/server/plural.js @@ -407,6 +407,17 @@ describe('Server', function () { }) }) + describe('POST /:parent/:parentId/:resource', function () { + it('should respond with json and set parentId', function (done) { + request(server) + .post('/posts/1/comments') + .send({body: 'foo'}) + .expect('Content-Type', /json/) + .expect({id: 6, postId: 1, body: 'foo'}) + .expect(201, done) + }) + }) + describe('PUT /:resource/:id', function () { it('should respond with json and replace resource', function (done) { var post = {id: 1, booleanValue: true, integerValue: 1}