Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions History.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@

1.0.0 / 2012-10-06
==================

* add 3x support... Closes #55

0.2.4 / 2011-12-28
==================

Expand Down
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

test:
@./node_modules/expresso/bin/expresso \
-I support
@./node_modules/.bin/mocha \
--require should \
--reporter spec

.PHONY: test
7 changes: 4 additions & 3 deletions Readme.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Express Resource

express-resource provides resourceful routing to express.
express-resource provides resourceful routing to express. For Express 2.x
use a version __below__ 1.0, for Express 3.x use 1.x.

## Installation

Expand Down Expand Up @@ -93,7 +94,7 @@ Resources have the concept of "auto-loading" associated data. For example we can

app.resource('users', { show: ..., load: User.load });

With the auto-loader defined, the `req.user` object will be available now be available to the actions automatically. We may pass the "load" option as the third param as well, although this is equivalent to above, but allows you to either export ".load" along with your actions, or passing it explicitly:
With the auto-loader defined, the `req.user` object will now be available to the actions automatically. We may pass the "load" option as the third param as well, although this is equivalent to above, but allows you to either export ".load" along with your actions, or passing it explicitly:

app.resource('users', require('./user'), { load: User.load });

Expand Down Expand Up @@ -232,7 +233,7 @@ Then run the tests:

The MIT License

Copyright (c) 2010-2011 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2010-2012 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2011 Daniel Gasienica <daniel@gasienica.ch>

Permission is hereby granted, free of charge, to any person obtaining
Expand Down
55 changes: 7 additions & 48 deletions examples/content-negotiation.js
Original file line number Diff line number Diff line change
@@ -1,54 +1,13 @@

require.paths.unshift(__dirname + '/../support');

/**
* Module dependencies.
*/

var express = require('express')
, resource = require('../')
, app = express.createServer();

var db = ['tobi', 'loki', 'jane']
, toys = ['ball', 'tunnel'];

var pet = {
index: {
json: function(req, res){
res.send(db);
},

default: function(req, res){
res.send(db.join(', '), { 'Content-Type': 'text/plain' });
}
}
};

var pets = app.resource('pets', pet);

pets.load(function(id, fn){
fn(null, db[id]);
});

// GET /pets/toys.xml
// this action must be defined above
// the one below as the :pet placeholder
// will otherwise match "/toys".

pets.get('/toys', {
xml: function(req, res){
res.send('<toys>' + toys.map(function(toy){
return '<toy>' + toy + '</toy>';
}).join('\n') + '</toys>');
}
});
, resource = require('..')
, app = express();

// GET /pets/1.xml
var users = app.resource('users', require('./controllers/user'));

pets.get({
xml: function(req, res){
res.send('<pet>' + req.pet + '</pet>');
}
app.get('/', function(req, res){
res.send('<a href="/users">View users</a>');
});

app.listen(3000);
app.listen(3000);
console.log('Listening on :3000');
14 changes: 5 additions & 9 deletions examples/nesting.js → examples/controllers.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@

require.paths.unshift(__dirname + '/../support');

/**
* Module dependencies.
*/

var express = require('express')
, resource = require('../')
, app = express.createServer();
, resource = require('..')
, app = express();

var main = app.resource(require('./controllers/main'));
var forums = app.resource('forums', require('./controllers/forum'));
var threads = app.resource('threads', require('./controllers/thread'));
forums.add(threads);

app.listen(3000);
app.listen(3000);
console.log('Listening on :3000');
4 changes: 4 additions & 0 deletions examples/controllers/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

exports.index = function(req, res){
res.send('main index');
}
67 changes: 67 additions & 0 deletions examples/controllers/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@

var users = [];

users.push({ name: 'tobi' });
users.push({ name: 'loki' });
users.push({ name: 'jane' });

/**
* GET index.
*/

exports.index = {
html: function(req, res){
res.send('<h1>Users</h1>'
+ users.map(function(user, id){
return '<a href="/users/' + id + '">' + user.name + '</a>';
}).join('\n'));
},

json: function(req, res){
res.send(users);
},

xml: function(req, res){
res.send(users.map(function(user){
return '<user>' + user.name + '</user>'
}).join(''));
}
};

/**
* POST create.
*/

exports.create = function(req, res){
res.send('created');
};

/**
* GET show.
*/

exports.show = {
html: function(req, res){
res.send('<h1>' + req.user.name + '</h1>');
},

json: function(req, res){
res.send(req.user);
},

xml: function(req, res){
res.send('<user>' + req.user.name + '</user>');
}
};

/**
* Auto-load user re-source for actions.
*/

exports.load = function(id, fn){
var user = users[id];
if (!user) return fn(new Error('not found'));
process.nextTick(function(){
fn(null, user);
});
}
22 changes: 0 additions & 22 deletions examples/root.js

This file was deleted.

50 changes: 0 additions & 50 deletions examples/user.js

This file was deleted.

Loading