Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/panta/express-mongoose-resource
Express resourceful routing for Mongoose models
https://github.com/panta/express-mongoose-resource
Last synced: about 2 months ago
JSON representation
Express resourceful routing for Mongoose models
- Host: GitHub
- URL: https://github.com/panta/express-mongoose-resource
- Owner: panta
- License: mit
- Created: 2012-09-24T16:48:51.000Z (about 12 years ago)
- Default Branch: master
- Last Pushed: 2017-12-06T05:12:09.000Z (about 7 years ago)
- Last Synced: 2024-04-15T12:18:58.270Z (8 months ago)
- Language: CoffeeScript
- Size: 168 KB
- Stars: 45
- Watchers: 7
- Forks: 4
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# express-mongoose-resource
express-mongoose-resource provides resourceful routing for [mongoose][] models to [expressjs][].
The library uses and extends [express-resource][], remaining fully compatible with it.
Note: actually we now use [express-resource-middleware][], which adds route middleware support, remaining fully backward compatible with the original.
## Install
npm install express-mongoose-resource
## Usage
As with [express-resource][], simply `require('express-mongoose-resource')`, and resourceful routing will be available through the `app.resource()` method.
In addition to the usual [express-resource][] usage and semantics of `app.resource()`, it's now also possible to simply pass a [mongoose][] model to `app.resource()`, and
a new `Resource` object will be returned for the given model.
For instance, if we have a [mongoose][] `Forum` model, calling```javascript
app.resource({model: Forum});
```will estabilish the default [express-resource][] mapping (apart for the new `schema` action):
GET /forums/schema -> schema
GET /forums -> index
GET /forums/new -> new
POST /forums -> create
GET /forums/:forum -> show
GET /forums/:forum/edit -> edit
PUT /forums/:forum -> update
DELETE /forums/:forum -> destroywhere the `:forum` parameter is the [mongoose][] ObjectId for the model instance.
Note that when `model` is not specified, `app.resource()` falls back to the standard [express-resource][] implementation.The format is determined using [express-resource][] content negotiation, and if not specified it's assumed to be `json`.
All actions are automatically available for the `json` format.It's also possible to nest resources:
```javascript
var ForumSchema = new mongoose.Schema({
...
});
var Forum = db.model("Forum", ForumSchema);var ThreadSchema = new mongoose.Schema({
forum: { type: mongoose.ObjectId, ref: 'Forum' },
...
});
var Thread = db.model("Thread", ThreadSchema);...
var r_forum = app.resource({model: Forum});
var r_thread = app.resource({model: Thread});r_forum.add(r_thread, {pivotField: 'forum'});
```which will add a `Thread` resource nested under `Forum`:
GET /forums/:forum/threads/schema -> schema
GET /forums/:forum/threads -> index
GET /forums/:forum/threads/new -> new
POST /forums/:forum/threads -> create
GET /forums/:forum/threads/:thread -> show
GET /forums/:forum/threads/:thread/edit -> edit
PUT /forums/:forum/threads/:thread -> update
DELETE /forums/:forum/threads/:thread -> destroy### Content-Negotiation
The format is determined using [express-resource][] content negotiation, and if not specified it's assumed to be `json`.
### HTML resources
The `index`, `new`, `show` and `edit` actions also support the `html` format. In this case, an [expressjs][] template is rendered.
For the `Forum` example above, the templates would be:- `forums/index` for the `index` action
- `forums/edit` for the `new` and `edit` actions
- `forums/show` for the `show` actionThe context passed to the template contains the following keys:
- `view`, the view name (`index`, `new`, `show`, `edit`)
- `name`, the template name (`index`, `show`, `edit`) (by default, `edit` is used by `new` and `edit` views)
- `model`, the mongoose model
- `schema`, the mongoose schema
- `modelName`, the mongoose model name
- `resource_id`, the action name
- `instance`, the mongoose model instance (`new`, `show` and `edit` actions)
- `object`, a plain JavaScript object corresponding to the mongoose model instance, as returned by mongoose `toJSON()` (`new`, `show` and `edit` actions)
- `instances`, the mongoose result set (`index` action)
- `objects`, an array of plain JavaScript objects corresponding to the mongoose result set (`index` action)
- `json`, the JSON string representation of the model instance (`new`, `show` and `edit` actions) or of the result set (`index` action)When using nested resources, the context also contains the `pivot` field value, name and id. In the example above, the context variable `pivot` would contain `forum`, `pivot_id` would contain the forum id, and `forum` would contain the serialized forum model.
## Bugs and pull requests
Please use the github [repository][] to notify bugs and make pull requests.
## License
This software is © 2012-2013 Marco Pantaleoni, released under the MIT licence. Use it, fork it.
See the LICENSE file for details.
[mongoose]: http://mongoosejs.com
[express-resource]: http://github.com/visionmedia/express-resource
[express-resource-middleware]: https://npmjs.org/package/express-resource-middleware
[CoffeeScript]: http://jashkenas.github.com/coffee-script/
[nodejs]: http://nodejs.org/
[expressjs]: http://expressjs.com
[Mocha]: http://visionmedia.github.com/mocha/
[Jade]: http://jade-lang.com
[repository]: http://github.com/panta/express-mongoose-resource