express-resource icon indicating copy to clipboard operation
express-resource copied to clipboard

Same resource nested and un-nested -> double call to auto-load

Open Spiralis opened this issue 13 years ago • 2 comments

Hi,

I have two resources, Collections and Teams, that I am exposing using express-resource, like this:

var competitions = app.resource("competitions", require('./resources/competitions'));
var teams        = app.resource("teams",        require('./resources/teams'));
competitions.add(teams);

Teams is then a nested resource within it's parent competition, which is as I wanted it to be. However, I also wanted teams to be accessible as it's own resource. In other words, like this:

/competitions/:id/teams/:id /teams/:id

So, to get this I changed the code as follows:

var competitions = app.resource("competitions", require('./resources/competitions'));
var teams        = app.resource("teams",        require('./resources/teams'));
competitions.add(teams);
teams = app.resource("teams", require('./resources/teams'));

I don't know if this is the way it is supposed to be set up, but this actually works. There is only one small problem. I have an auto-load method setup for the team-resource, and when I access the /teams/:id resource it actually ends up calling the auto-load twice. I guess that somehow it fires for both the teams/.id and the competitions/:id/teams/:id resource?

Any ide on how to avoid this from happening?

Spiralis avatar Feb 12 '12 15:02 Spiralis

I ran into this as well. I used the express-resource map function to manually define my non-nested routes . I don't use the auto-load functionality but you could give this method a shot if you're still running into this issue.

tenant.map( 'del', '/:tenant', tenantModule.destroy );
tenant.map( 'get', '/:tenant', tenantModule.show );
tenant.map( 'put', '/:tenant', tenantModule.update );

location.add( tenant );

kb19 avatar Apr 11 '13 20:04 kb19

+1

wanbok avatar Apr 13 '13 17:04 wanbok