Add POST /:resource/:id/:nested route

This commit is contained in:
Typicode
2015-11-26 00:37:29 +01:00
parent 6ea345b0f3
commit e04389cd7c
4 changed files with 34 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -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)
}

View File

@ -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}